ru.BIR.ru

Pahan-Hubbitus private forum
Текущее время: Пн дек 11, 2017 9:03 pm

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: HuRegRep (Hubbitus Regular Replacer)
СообщениеДобавлено: Пт май 30, 2008 4:25 pm 
Не в сети
Site Admin

Зарегистрирован: Ср сен 06, 2006 10:36 pm
Сообщения: 309
Часто в работе нужно заменить в файле что-то на что-то. Ну можно открыть файл в любом редакторе и сделать замену...
Ведь все наверное хоть раз использовали grep кто работал в *NIX? Вот только одна беда? grep ничего не модифицирует (если не учитывать цветную подсветку).

  • Но что если это требуется сделать в 5, 10, 100 файлах сразу??? Можно по одному, но не состаритесь ли делая?
  • А что если заменить надо не "Вася" на "Петя", а по регуляртному выражению. Ну например, просто вырезать из файла все знаки препинания элементарным: /[,.\/\-=+?!*]/
  • А если задача немного усложняется, надо в замене использовать захваченные сабпатерны (то что в скобках в выражении). Ну то есть замена идёт не на статический текст, а в зависимости от того что найдено.
  • Замена хорошо, ну а вдруг понадобилось что-то вставить после найденного совпадения? В простейшем случае это можно и в регулярном выражении сделать., но...
  • Но а если надо после строки, в которой найдено совпадение?

Так, значит grep крут, но ничего не модифицирует. Я поискал, нашёл утилиту replace из состава клиентских утилит MySQL-сервера, но во-первых, не всегда оно есть под рукой, во вторых его использование весьма и весьма ограничено фиксированными строками как на поиск так и на замену...
Остаётся что? Правильно, скриптовать! Тут на помощь приходит шикарный sed (крайне удобен, когда нужно быстро что-то небольшое исправить в одном или множестве файлов), дальше awk и Perl ну и PHP - ну эти вообще монстры, с ними можно сделать с текстом все что угодно, хоть живого Пиннокио... вот только часто для подобных задач поиска и замены все же не слишком удобно их применять, особенно если скажем команда в конвейере. Также все равно придется скриптовать циклы прохода по нескольким файлам, писать в этих скриптах остальные условия. Конечно, один раз можно написать под конкретную задачу. Дальше уже хочется чего-то поуниверсальнее, не открывать-закрывать файл, читать, заменять в нем и выводить, а просто указать что на что заменить, что после чего вставить... Ну и скрипт потихоньку обрастает опциями, чтобы все эти действия становилось делать все удобнее...

Так вот, такое долго вступление, я и предлагаю такой скриптик, который получился у меня для данных целей: HuRegRep.

Использование весьма элементарно:
Код:
bash-3.2$ replace_in_file
Usage:

/home/pasha/bin/replace_in_file -w '/what/' -t 'text to' [file1 file2...]

If files not present, STDIN used.

Options:

-a
--after
        Insert argument to AFTER this one. Short form, equals to combination: "--what '/pattern/' --to '$0 add text'"
-w
--what
        What replace. PCRE regular expression. See -p to change to plain text.
-t
--to
        Text to replace. Backreference $0, $1, $2... allowed (while --plain not used).
        So, as no --plain used, and you may use backreference like $1, $2 etc, you shoud escape other appearenc of sign "$" in text --to.

-p
--plain
        Use What replace as plain text instead of regular expression.
-l
--line-after
        Use cooperated with --after. If present - patern --after match to line, and inserting --to after end of line, not in.
-i
--in-place
        Opt. Replace input file by result. Be careful if results are wrong you may waste all data!!!
-e
--escape
        Opt. Enable interpretation of backslash escapes (\n, \r, \t etc...).

Author: Pavel Alexeev aka Pahan-Hubbitus.
On all suggestions, questions, feature requests, BUG-reports - welcome on http://ru.bir.ru/ ( http://ru.bir.ru/viewtopic.php?f=25&t=652 )


Я думаю по краткому хелпу и описания для чего это, все и так понятно Smile
Примеров понакатаю чуть позже.
Буду рад любым отзывам, если это кому-то вдург все же будет полезным.


Вложения:
Комментарий к файлу: HuRegRep-0.1
HuRegRep-0.1.tar.bz2 [11.58 КБ]
Скачиваний: 577

_________________
Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Пожаловаться на это сообщение
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: HuRegRep (Hubbitus Regular Replacer)
СообщениеДобавлено: Вт окт 12, 2010 1:13 am 
Не в сети
Site Admin

Зарегистрирован: Ср сен 06, 2006 10:36 pm
Сообщения: 309
Новая версия 0.2. Давно собирался обновить.

Из основных новшеств:
  • Добавлена опция -c (--comment)
  • Добавлены автоматические тесты на PHPUnit
  • Добавлено множество недостающих файлов (выявлены благодаря тестам)
  • Исправлено несколько ошибок
  • Подчищен слегка код


New version 0.2. Many time I want update it.

Changelog:
  • Added option -c (--comment)
  • Introduced automated PHPUnit tests
  • Added many required files from my framework (thanks to tests for catch)
  • Some bugfixes
  • Code cleanup


Вложения:
HuRegRep-0.2.tar.bz2 [32 КБ]
Скачиваний: 415

_________________
Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Пожаловаться на это сообщение
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: HuRegRep (Hubbitus Regular Replacer)
СообщениеДобавлено: Ср ноя 17, 2010 12:18 am 
Не в сети
Site Admin

Зарегистрирован: Ср сен 06, 2006 10:36 pm
Сообщения: 309
Сказали мне тут что файл не скачивается :( Действительно потерялся. Долго искал, но пришлось-таки все тесты переделывать. Попутно исправлено несколько багов. И теперь оно уже в SVN'е...

Список измененеий в версии 0.2.1:
- Исправлена ошибка когда ключ --line-after не работал если в исходном набере в последней (или единственной) строке не было символов конца строки.
- Длинные опции теперь могут не иметь пробела перед аргументом.
- То же самое для коротких, исправлена ошибка обработки.
- Покрытие тестами теперь распространяется на все доступные опции.

Changelog of version 0.2.1:
- Fix bug when --line-after does not work with last (single) line of data.
- Allow long option does not have space after it.
- Allow short option have not space.
- Add many PHPUnit tests, cover all script options.


Вложения:
Комментарий к файлу: HuRegRep-0.2.1.tar.bz2
HuRegRep-0.2.1.tar.bz2 [33.01 КБ]
Скачиваний: 275

_________________
Если у Вас есть все что Вы хотите - значит Вы мало хотите!
Пожаловаться на это сообщение
Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
POWERED_BY
Русская поддержка phpBB
[ Time : 0.059s | 16 Queries | GZIP : On ]