LINUX.ORG.RU

Регулярные выражения и Gedit

 ,


0

2

Доброй ночи. Надумал решить следующую задачу.

Имеется десяток разных текстов и каждых нужно заменить различные фразы и словосочетания. Например «потому что» на «поскольку», «как видно» на «как можно увидеть» и.т.д.

Чтобы это сделать, обратил внимание на регулярные выражения. Нашел плагин для их поддержки в Gedit и программу regexxer. Появилось несколько вопросов:

- можно ли вообще написать такую регулярку, которая сможет одновременно найти различные словосочетания и заменять их на соответственно заданные?

- в Gedit начал пробовать писать выражение. Поиск слов на кириллице делает, но замену сделать не может, только на английский алфавит.

- есть ли для этой задачи другое решение?

- можно ли вообще написать такую регулярку, которая сможет одновременно найти различные словосочетания и заменять их на соответственно заданные?

В консоли можно.

- в Gedit начал пробовать писать выражение. Поиск слов на кириллице делает, но замену сделать не может, только на английский алфавит.

Приведите конкретный пример того, что не работает.

- есть ли для этой задачи другое решение?

Рекомендую perl.

ArcFi
()
Ответ на: комментарий от Wind

проще, только замену он делает по одной фразе. И вручную каждую очень долго, тем более хочется чтобы база таких замен со временем увеличивалась.

bagdanchik
() автор топика
Ответ на: комментарий от ArcFi

нашел плагин для gedit поддержки регулярных выражений.

Открываю его, в поле «find» пишу русский символ. Если в поле «replace» пишу, чтобы менял на английские буквы - заменяет. Если же пишу чтобы на русские буквы менял - ничего не хочет делать.

bagdanchik
() автор топика
Ответ на: комментарий от bagdanchik

нашел плагин для gedit поддержки регулярных выражений.

Замена на русские буквы работает нормально через Ctrl+H с галкой «Регулярное выражение», никакого плагина не ставил, Gedit 3.18.3.

ArcFi
()
Ответ на: комментарий от ArcFi

да нет, такой галки не видел. версия 3.4.1.

по поводу perl. я так понимаю, для это на perl пишется скрипт с заданными регулярками, после чего через терминал им можно прогнать заданный файл?

bagdanchik
() автор топика

Тебе проще будет составить список замен, и по тексту много раз пробежаться хоть тем же sed'ом - с регулярками (в том числе и через perl) ты уже на следующий день забудешь что там написал. Все это можно сделать скриптом и не запускать тысячу раз руками - включил и пошел чаи гонять, он сам все поменяет. В случае добавления каких-то новых слов для замены опять же ты только расширяешь список слов для замены, не меняя основную логику.

alozovskoy ★★★★★
()
Ответ на: комментарий от alozovskoy

понял, спасибо большое, именно такое и интересует. по поводу такого скрипта вопрос.

сначала в нем нужно прописать запуск sed. затем указать файл, который в нем нужно открыть. добавить команды для замены текста. запускать и делать прогон.

я правильно понимаю?

bagdanchik
() автор топика
Ответ на: комментарий от bagdanchik

Можно скриптом, можно одной командой — как вам удобнее.
Даже многострочные регэкспы довольно просто реализуемы.

ArcFi
()
Ответ на: комментарий от bagdanchik

Сначала нужно определиться какие слова на что заменять - грубо говоря составить файл заменяемых слов и на каждое из них файлики со словами замены. Потом для каждого слова из файла со словами для замены пробегаем sed'ом по файлу с текстом, слова заменяем на рандомные из файла со словами для замены. Когда весь текст перечитали - берем второе слово из файла с заменяемыми словами и начинаем заново. И так пока не дойдем до конца списка со словами для замены.

Замена в sed

sed 's/что менять/на что менять/g'

Если в приведенном выше примере букву g убрать - будет заменено только первое найденное словосочетание, если оставить - все найденные словосочетания подвергнутся замене.

Опять же обращаю внимание на то, что этот метод будет долгий и «не тру», но он проще всего реализуется, так как на сколько я понимаю знания что в регулярках, что в shell у вас не очень обширные (иначе этой темы бы не было), так что думаю это будет проще и лучше.

alozovskoy ★★★★★
()
Ответ на: комментарий от ArcFi

Понял, значит можно разбираться. Главное, что интересовало, реально ли сделать такую задачу.

Всем спасибо за помощь.

bagdanchik
() автор топика
Ответ на: комментарий от alozovskoy

Честно говоря, этих знаний у меня просто ноль.

bagdanchik
() автор топика
Ответ на: комментарий от ArcFi

да уж, рассказал бы вживую - поляну бы накрыл.

bagdanchik
() автор топика
Ответ на: комментарий от bagdanchik

это что, готовое решение?

Ага, для простого случая должно подойти.

«file» - там полный путь к файлу?

Можно использовать как полный, так и относительный путь.

ArcFi
()
Ответ на: комментарий от ArcFi

Отлично получилось. Вот это тема, скрипт написал - работает.

bagdanchik
() автор топика
Ответ на: комментарий от ArcFi

еще можно вопрос, а есть ли возможность импортировать отдельный файл, чтобы пары «s/найти1/заменить1/g;» были отдельно?

просто нужно большое количество пар.

bagdanchik
() автор топика
Ответ на: комментарий от ArcFi

здесь FILE - там где замена нужна CMD - импортированный файл?

bagdanchik
() автор топика
Ответ на: комментарий от bagdanchik

а литература есть какая-нибудь по самим регуляркам?

Можно погуглить ко ключевым словам: регулярные выражения + учебник.
Наверняка что-нибудь подходящее найдётся.

ArcFi
()
Ответ на: комментарий от ArcFi

да тут не пойму: s/найти1/заменить1/g;

в «найти1» можно ведь указать не только точное вхождение - можно и регулярку ведь вписать, правильно?

bagdanchik
() автор топика
Ответ на: комментарий от bagdanchik

в «найти1» можно ведь указать не только точное вхождение - можно и регулярку ведь вписать, правильно?

Да, можно.

ArcFi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.