я не знаю всех утилит и овер 100500 команд для каждой. легче один язык освоить. имхо.
3.2.7. Запрещено оскорблять участников и отвечать на оскорбления в любой форме — прямой, косвенной или заочной. yars.
Правка/поиск текста
[console]
$ grep -i "^год " *
[/console]
ПОП, по 2 и 3 пункту задачу не понял...
grep -i "^год " *Вывод такой:
Показать
Словарь_синонимов:год || без году неделю, без году неделю на свете живет, в летах, в цвете лет, войти в года, входить во все года, дать кому-л. сколько-л. лет, за много лет тому назад, лета, на старости лет, промаяться год, промаячить год, с малых лет, средних лет, человек в летах, человек в почтенных летах
Ушаков:ГОД года, мн. года и годы, годов, м. 1. Единица летосчисления, промежуток времени, соответствующий периоду обращения земли вокруг солнца. Астрономический год (365 дней, 5 ч., 48 м., 51 с.). Звездный год (365 дней, 6 ч., 9 м., 10 с.). Гражданский год (365 или 366 дней). || Период времени в 12 месяцев. отчисляемых от какого-н. определенного дня. Третий год от рождения. Ей пошел пятый год. Хозяйственный год недавно считали с 1 октября по 1 октября. Мы с год не видались. || Период времени в 12 календарных месяцев, считая с 1-го января. 1920 г. || Круговорот четырех периодов: зимы, весны, лета и осени. Простоял хороший год. Нынешний год. урожайный.
grep -i ^год *Вывод намного больше:
Показать
Ефремова:год м. 1) Промежуток времени, соответствующий одному обороту Земли вокруг Солнца, содержащий 365 и 366 суток, или 12 календарных месяцев, отсчитываемых с 1 января, как единица летосчисления. 2) а) Промежуток времени в 12 месяцев, отсчитываемый от какого-л. определенного момента, дня. б) Такой промежуток времени,
Ожегов:год промежуток времени, равный периоду обращения Земли вокруг Солнца - 12 месяцам, вообще срок в 12 месяцев Календарный г. (с января по декабрь включительно). Четыре времени года (зима, весна, лето, осень). Новый г. (наступающий следующий год, а также день 1 января). Прошло три года, пять лет. Урожайный г. Два года, пять лет от рождения (ребенку). Н- год (на один год). З- год (за один год). Из года в год (повторяясь каждый год). Год на год (н- год) не приходится (в разные годы бывает по-разному; разг.). Круглый г. (весь год). С годами (по прошествии времени). Годами не видимся (по нескольку лет подряд).
Ожегов:год промежуток времени, в который завершается цикл каких-нибудь работ, занятий Учебный г. Сельскохозяйственный г. Хозяйственный г. Финансовый г.
Ожегов:год период времени охватывающий некоторое количество лет Героические годы. Детские годы. В годы юности.
Ожегов:год возраст Он уже в годах (пожилой, старый). Теперь уже годы не те (стал уже старым, стареет). Не по годам (не по возрасту). Решение откладывается с году на год.
Ожегов:год В сочетании с порядк. числ. промежуток времени в пределах десятилетия Восьмидесятые годы 20 века. Люди сороковых годов.
Ожегов_Шведова:ГОД, -а (-у), в году, о годе, мн. годы и года, годов и лет, годам, м.1. Промежуток времени, равный периоду обращения Земли вокруг Солнца - 12месяцам, вообще срок в 12 месяцев. Календарный г. (с января по декабрьвключительно). Четыре времени года (зима, весна, лето, осень). Новый г.(наступающий следующий год, а также день I января). Прошло три года, пятьлет. Урожайный г. Два года, пять лет от рождения (ребенку). На год (на одингод), 3d год (за один год). Из года в год (повторяясь каждый год). Год нагод (на год) не приходится (в разные годы бывает по-разному; разг.). Круглыйг. (весь год). С годами (по прошествии времени). Годами не видимся (понескольку лет подряд). 2. (род. мн. годов). Промежуток времени, в к-рыйзавершается цикл каких-н. работ, занятий. Учебный г. Сельскохозяйственный г.Хозяйственный г. Финансовый г. (годичный срок оборота финансовых средств).3. мн. Период времени, охватывающий нек-рое количество лет. Героическиегоды. Детские годы. В годы юности. 4. мн. (род. мн. годов). В сочетании спорядк. числ. - промежуток времени в пределах десятилетия. Девяностые годы20 века. Люди сороковых годов. 5. мн. Возраст. Он уже в годах (пожилой, старый). Теперь уже годы не те (стал уже старым, стареет). Не по годам (непо возрасту).* Год от году - с каждым следующим годом (о чем-н.изменяющемся). Город хорошеет год от году. Без году неделя (разг. неодобр.)- с очень недавнего времени. Живет здесь без году неделя, а уже со всемиперессорился. С году на год (разг.) - переходя из одного года в другой.Решение откладывается с году на год. II уменьш. годик, -а, м. (к 1 знач.) игодок, -дка, м. (к 1 знач.; разг.). II прил. годичный, -ая, -ое (к 1 и 2знач.) и годовой, -ая, -ое (к 1 и 2 знач.). Го-дичный отпуск (на год).Годичное собрание (ежегодное). Годовой доход (за год). Годо-вой план (нагод).
Словарь_синонимов:год || без году неделю, без году неделю на свете живет, в летах, в цвете лет, войти в года, входить во все года, дать кому-л. сколько-л. лет, за много лет тому назад, лета, на старости лет, промаяться год, промаячить год, с малых лет, средних лет, человек в летах, человек в почтенных летах
Толковый_словарь:ГОД , промежуток времени, приблизительно равный периоду обращения Земли вокруг Солнца. В астрономии различают: 1) сидерический (звездный) год, соответствующий одному видимому обороту Солнца по небесной сфере относительно неподвижных звезд; составляет 365,2564 средних солнечных суток; 2) тропический год - промежуток времени между двумя последовательными прохождениями центра истинного Солнца через точку (среднюю) весеннего равноденствия (365,2422 сут); 3) аномалистический год - промежуток времени между двумя последовательными прохождениями центра Солнца через перигей его видимой геоцентрической орбиты (365,2596 сут); 4) драконический год, соответствующий времени между двумя последовательными прохождениями Солнца через один и тот же (восходящий или нисходящий) узел орбиты Луны на эклиптике (346,6200 сут); продолжительность всех годов приведена для 1900; 5) календарный год, составляющий 365 сут для простых годов и 366 сут для високосных годов; 6) лунный год продолжительностью 12 лунных синодических месяцев (в среднем 354,367 сут).
Ушаков:ГОД года, мн. года и годы, годов, м. 1. Единица летосчисления, промежуток времени, соответствующий периоду обращения земли вокруг солнца. Астрономический год (365 дней, 5 ч., 48 м., 51 с.). Звездный год (365 дней, 6 ч., 9 м., 10 с.). Гражданский год (365 или 366 дней). || Период времени в 12 месяцев. отчисляемых от какого-н. определенного дня. Третий год от рождения. Ей пошел пятый год. Хозяйственный год недавно считали с 1 октября по 1 октября. Мы с год не видались. || Период времени в 12 календарных месяцев, считая с 1-го января. 1920 г. || Круговорот четырех периодов: зимы, весны, лета и осени. Простоял хороший год. Нынешний год. урожайный.
Остальные слова, начинающиеся с букв "год", не копирую сюда.
Почему такое расхождение?
вот кастыль.
Кастыль не помогает, ссылаясь на ошибки в 17 и 23 строке.
ПОП, по 2 и 3 пункту задачу не понял...
Во 2-м пункте указываются ошибки, которые желательно исправить...
В 3-м: чтобы вывод был не в консоль, а в диалоговое окно (в читабельном виде), но с возможностью править текст.
На Хабре видел статью про zenity, вот и захотелось попробывать сделать скрипт...
grep -i "^год " *
Лишний пробел.
Почему такое расхождение?
В некоторых словарях (напр. Ожегов_Шведова:ГОД, ) после слова стоит запятая.
Кастыль не помогает, ссылаясь на ошибки в 17 и 23 строке.
Вы его слепо запускали даже не читая.
в таком случае он и не должен работать.
вот вам паттерн, подгоняйте сами
начало строки
слово начинающееся с заглавной
необязательное подчеркивание
слово
двоеточие
искомое слово с игнором регистра
необязательная запятая
пробельный символ.
если это перл то необязательное подчеркивание делать не надо.
//add тупанул. двоеточия то grep вставляет?
и если у Вас текст словаря идет монолитом (где абзацы определений слов ничем не ограничиваются друг от друга, то ничего не получится
В некоторых словарях (напр. Ожегов_Шведова:ГОД, ) после слова стоит запятая.
В этом случае можно попробовать поискать так:
word="год"
grep -Ei "^${word}[^[:alpha:]]{1,}" *При этом будет вестись поиск указанной в переменной word последовательности символов, находящейся в начале строки, за которой следует один или более символов, не являющихся буквами.
P. S. Кстати, а не могли бы вы выложить здесь один или несколько имеющихся у вас файлов-словарей? Глядишь, я на досуге и поработал бы над вашей проблемой. :)
тогда уж как то так
grep -ioH "^[\t ]*год[^[:alpha:]]"Насколько я понял, вопрошающему нужно выводить на экран не просто совпавшую последовательность, а целую словарную статью, поэтому опция -o в вашей конструкции немного лишняя. :)
Почему такое расхождение?
Извиняюсь, закрался лишний пробел в кавычках. А вообще, правильнее указал allez:
$ grep -Ei "^год[^[:alpha:]]" *
в консоли читать для глаз слишком жестоко
Настройте консоль.
Во 2-м пункте указываются ошибки, которые желательно исправить...
Ну, это на целую диссертацию потянет, если не приспособить готовые решения :)
В 3-м: чтобы вывод был не в консоль, а в диалоговое окно (в читабельном виде), но с возможностью править текст.
Неизвестен формат входных данных. Возможно там следует использовать другой подход для поиска.
а не могли бы вы выложить здесь один или несколько имеющихся у вас файлов-словарей
Словари_1.tar.gz : Брокгауз_Ефрон, БСЭ, Ефремова
Словари_2.tar.gz : Даль, Ожегов, Ожегов-Шведова, Ушаков, Философский словарь, Значения имен, Иностранных слов, Музыкальные жанры, Словарь компьютерных терминов, Словарь синонимов
P.S. Простите за большие паузы, не хватает времени...
P.S. Простите за большие паузы, не хватает времени...
Ничего страшного, Москва не сразу строилась, да и я скрипт напишу не мгновенно. :)
ПОП, у Вас только 2 архива?
второй перезалейте пожалуйста куда нибудь где не нужно вводить номер телефона.
напишу себе скриптик тоже.
там не абзацы, там каждое определение умещается на одной строке.
$string =~ /^(.?)слово\g{1}[,-]?\s/
пока только такое определение вижу
ПОП, у Вас только 2 архива?
Архивов больше, только они большинство на Православную тематику и в разных форматах. Есть и такие: Толковый словарь эрудита, Энциклопедия заблуждений, Энциклопедия этикета, Энциклопедия чудес загадок и тайн, Энциклопедия - Мифы древнего Египта, Энциклопедия обрядов и обычаев.., по стилистике, языковые и т.д., если понадобятся, можно и их выложить.
второй перезалейте пожалуйста куда нибудь где не нужно вводить номер телефона.
Номер телефона вводить не надо. Внизу нажмите кнопку: "Спасибо, не надо" и откроется страница, где вводите символы, которые Вы видите на картинке и начнется загрузка файла.
За подсказки, спасибо!
#наслаждайтесь
perl -C -Mutf8 -n -e 'print $_ if /^"?слово_в_любом_регистре[",-]?\s/i' Словари_*/*
gu@moshell:~$ perl -C -Mutf8 -n -e 'print $_ if /^"?абба[",-]?\s/i' Словари_*/*
"АББА" (ABBA - по первым буквам имен участников группы), шведская поп-группа, возникла в 1973. Состав: Бенни Андерссон (клавишные, синтезатор, вокал), Бьорн Ульвеус (гитара, вокал), Агнета Фельтског (вокал), Анни-Фрид Лингстад Фредерикс (вокал). В 1970-е и нач. 80-х гг. гастролировала во многих зарубежных странах и завоевала всемирную популярность. Тексты песен на английском языке. Наиболее популярные песни "Waterloo" (Ватерлоо) (1974), "Fernando" (Фернандо), "Money, Money, Money" (Деньги, деньги, деньги) (обе 1976), "Knowing Me Knowing You" (1977) и др., обладают красивой мелодией и отличаются эмоциональным исполнением. Наиболее известные диски - "Waterloo" (1974), "ABBA" (1975), "Voulez-Vous" (1979). В 1983 распалась.
gu@moshell:~$ perl -C -Mutf8 -n -e 'print $_ if /^"паскаля улитка[",-]?\s/i' Словари_*/*
ПАСКАЛЯ УЛИТКА , плоская кривая, множество точек М и М?, расположенных на прямых, исходящих из одной точки О данной окружности, на одинаковом расстоянии по обе стороны от точки Р пересечения прямых с окружностью. Алгебраическая кривая 4-го порядка. Рассмотрена французским ученым Э. Паскалем (E. Pascal, 17 в.).
gu@moshell:~$ perl -C -Mutf8 -n -e 'print $_ if /^"?пенис[",-]?\s/i' Словари_*/*
пенис м. Мужской половой член.
###
#с этого и надо было начинать. без визуального ознакомления с текстом, тяжело писать парсилку
#если какое то слово не будет находить, но оно присутствует в словаре, сообщите, подправим регулярочку. все over100500 слов нет желания проверять
#я распаковал два ахрива в $HOME
#наслаждайтесь
perl -C -Mutf8 -n -e 'print $_ if /^"?слово_в_любом_регистре[",-]?\s/i' Словари_*/*
Спасибо, большое! Пожалуй, это команда больше выводит.
Но, сравните вывод двух команд:
grep -Ei "^слово[^[:alpha:]]" *и
perl -C -Mutf8 -n -e 'print $_ if /^"?слово[",-]?\s/i' *В первой: вывод с подсветкой и указанием источника найденного слова. Это важно, т.к. более читабельна и дает возможность исправить ошибку в оригинале, если будет найдена. В перле это можно поправить?
Ребята, помогите теперь сделать скрипт для вывода найденного в диалоговое окно. Например, скрипт (в котором указан путь к словарям) запускается из меню:
#!/bin/sh
if zenity --entry --title="Справочник" --text="Введите слово для поиска и нажмите ОК:" \
--entry-text=""Вводим "искомое слово"... Как передать "искомое слово" команде поиска с выводом на экран (с возможностью правки текста), как-то так:
open_path="$(zenity --file-selection)"
if [ "$open_path" != "" ]
then
orig_text=$(cat "$open_path")
edit_text=$(echo -n "$orig_text" | zenity --text-info --editable \
--width=900 --height=400)
save_path=$(echo -n "$(zenity --file-selection \
--filename="$open_path" --save --confirm-overwrite)")
echo -n "$edit_text" > "$save_path"
fi
Нашел на Opennet-те еще одну заготовку:
#!/bin/bash
# makedict.sh [создание словаря]
# Модификация сценария /usr/sbin/mkdict.
# Авторские права на оригинальный сценарий принадлежат Alec Muffett.
#
# Этот модифицированный вариант включен в документ на основе
#+ документа "LICENSE" из пакета "Crack"
#+ с которым распространяется оригинальный сценарий.
# Этот скрипт обрабатывает текстовые файлы и создает отсортированный список
#+ слов, найденных в этих файлах.
# Он может оказаться полезным для сборки словарей
#+ и проведения лексикографического анализа.
E_BADARGS=65
if [ ! -r "$1" ] # Необходим хотя бы один аргумент --
then #+ имя файла.
echo "Порядок использования: $0 имена_файлов"
exit $E_BADARGS
fi
# SORT="sort" # Необходимость задания ключей сортировки отпала.
#+ Изменено, по отношению к оригинальному сценарию.
cat $* | # Выдать содержимое файлов на stdout.
tr A-Z a-z | # Преобразовать в нижний регистр.
tr ' ' '\012' | # Новое: заменить пробелы символами перевода строки.
# tr -cd '\012[a-z][0-9]' | # В оригинальном сценарии: удалить все символы,
#+ которые не являются буквами или цифрами.
tr -c '\012a-z' '\012' | # Вместо удаления
#+ неалфавитно-цифровые символы заменяются на перевод строки.
sort |
uniq | # Удалить повторяющиеся слова.
grep -v '^#' | # Удалить строки, начинающиеся с "#".
grep -v '^$' # Удалить пустые строки.
exit 0
Какой вариант лучше? Во втором нет возможности правки...
В первой: вывод с подсветкой и указанием источника найденного слова. Это важно, т.к. более читабельна и дает возможность исправить ошибку в оригинале, если будет найдена. В перле это можно поправить?
наслаждайся.
gu@moshell:~$ perl -CA -Mutf8 -M'open qw(:std :utf8)' -n -e 'print "$ARGV :> $_" if /^"?алкоголь[",-]?\s/i' Словари_*/*
Словари_1/Ефремова :> алкоголь м. 1) Винный спирт. 2) разг. Водка и другие крепкие спиртные напитки.
Словари_2/Даль :> АЛКОГОЛЬ м. химич. мельчайшая очищенная пыль, порошок, бус; | чистый винный спирт, безводный спирт (хлебный или плодовый); виноспирт, извинь. Алкогольный, спиртовой, извинный; алкоголический, то же, более в смысле подобия, сходства; алкоголистый, спиртоватый, с извинью. Алкоголизировать что, обращать в пыль, в извинь. Алкоголизация ж. действие по глаг., винное брожение, преобразование вещества в вино. Алкоголеметр м. спиртомер, виномер; поплавок с градусником, показывающий отношение извини к воде, крепость, в данной смеси; он основан на относительной (удельной) тяжести той и другой жидкости. см. ареометр.
Словари_2/Иностранных_слов :> алкоголь [< ар. al-kuhl тонкий порошок]- 1) алкоголя - иначе спирты - класс органических соединений алифатического ряда, содержащих гидроксильную группу (он); многие спирты, напр, этиловый (винный), метиловый, бутиловый, широко используются как сырье и полупродукты во многих промышленных синтезах, как растворители и т. д.; 2) в разговорном языке - винный спирт.
Словари_2/Ожегов :> алкоголь одноатомный спирт
Словари_2/Ожегов :> алкоголь вообще вино, спиртные напитки
Словари_2/Ожегов_Шведова :> АЛКОГОЛЬ, -я, м. 1. Одноатомный спирт (спец.). 2. Вообще вино, спиртныенапитки. II прил. алкогольный, -ая, -ое. Алкоголь- \ ная зависимость(болезненное влечение к алкоголю).
Словари_2/Ушаков :> АЛКОГОЛЬ алкоголя, м. (от араб. al-kuhl). То же, что спирт (хим.). || Винный спирт. || Вино, спиртные напитки (разг.). Изгнать алкоголь из быта рабочих.
gu@moshell:~$
подсветить синтаксис пока еще выходит за рамки моих знаний
про встроенные модули не знаю еще.
если подключать внешние раскрашивающие модули и указывать на них в ком стоке, то нужно чтобы они и у вас были установлены.
ps. скоро можно будет статью про однострочники писать.
gu@moshell:~$ perl -CA -Mutf8 -M'open qw(:std :utf8)' -n -e 'print "$ARGV :> $_" if /^"?алкоголь[",-]?\s/i' Словари_*/*
Уже лучше, но у меня все сплошным текстом, т.е. без выделения даже источников. Если с выводом в текстовое окно, то можно было бы и так оставить, только с выделением источников...
[quote="moshell"]gu@moshell:~$ perl -CA -Mutf8 -M'open qw(:std :utf8)' -n -e 'print "$ARGV :> $_" if /^"?алкоголь[",-]?\s/i' Словари_*/*
Уже лучше, но у меня все сплошным текстом, т.е. без выделения даже источников. Если с выводом в текстовое окно, то можно было бы и так оставить, только с выделением источников...[/quote]
что значит без выделения?
вот оно
gu@moshell:~$ perl -CA -Mutf8 -M'open qw(:std :utf8)' -n -e 'print "$ARGV :> $_" if /^"?алкоголь[",-]?\s/i' Словари_*/*
следайте вот так *JOKINGLY*
gu@moshell:~$ perl -CA -Mutf8 -M'open qw(:std :utf8)' -n -e 'print "$ARGV", ">" x 30," $_" if /^"?алкоголь[",-]?\s/i' Словари_*/*
Словари_1/Ефремова>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> алкоголь м. 1) Винный спирт. 2) разг. Водка и другие крепкие спиртные напитки.
Словари_2/Даль>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> АЛКОГОЛЬ м. химич. мельчайшая очищенная пыль, порошок, бус; | чистый винный спирт, безводный спирт (хлебный или плодовый); виноспирт, извинь. Алкогольный, спиртовой, извинный; алкоголический, то же, более в смысле подобия, сходства; алкоголистый, спиртоватый, с извинью. Алкоголизировать что, обращать в пыль, в извинь. Алкоголизация ж. действие по глаг., винное брожение, преобразование вещества в вино. Алкоголеметр м. спиртомер, виномер; поплавок с градусником, показывающий отношение извини к воде, крепость, в данной смеси; он основан на относительной (удельной) тяжести той и другой жидкости. см. ареометр.
Словари_2/Иностранных_слов>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> алкоголь [< ар. al-kuhl тонкий порошок]- 1) алкоголя - иначе спирты - класс органических соединений алифатического ряда, содержащих гидроксильную группу (он); многие спирты, напр, этиловый (винный), метиловый, бутиловый, широко используются как сырье и полупродукты во многих промышленных синтезах, как растворители и т. д.; 2) в разговорном языке - винный спирт.
Словари_2/Ожегов>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> алкоголь одноатомный спирт
Словари_2/Ожегов>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> алкоголь вообще вино, спиртные напитки
Словари_2/Ожегов_Шведова>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> АЛКОГОЛЬ, -я, м. 1. Одноатомный спирт (спец.). 2. Вообще вино, спиртныенапитки. II прил. алкогольный, -ая, -ое. Алкоголь- \ ная зависимость(болезненное влечение к алкоголю).
Словари_2/Ушаков>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> АЛКОГОЛЬ алкоголя, м. (от араб. al-kuhl). То же, что спирт (хим.). || Винный спирт. || Вино, спиртные напитки (разг.). Изгнать алкоголь из быта рабочих.
gu@moshell:~$