Какой инструмент командной строки GNU / Linux я бы использовал для поиска и замены файла? - PullRequest
24 голосов
/ 01 октября 2008

Какой инструмент командной строки GNU / Linux я бы использовал для поиска и замены файла?

Можно ли указать текст для поиска и замены в формате регулярного выражения?

Ответы [ 4 ]

51 голосов
/ 01 октября 2008
sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (который у вас, вероятно, есть) еще более универсален:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Вот краткое объяснение этих опций:

-i [SUFFIX], --in-place [= SUFFIX] редактировать файлы на месте (делает резервную копию, если расширение предоставлено)

-r, --regexp-extended используйте расширенные регулярные выражения в скрипте.

Версия FreeBSD также поддерживает эти параметры. Версии NetBSD и OpenBSD поддерживают только -r.

Если вы хотите узнать больше о sed, Cori предложил этот урок .

27 голосов
/ 01 октября 2008

Perl был изобретен для этого:

perl -pi -e 's/foo/bar/g;' *.txt

Любой нормальный шаблон s /// в этих одинарных кавычках. Вы можете сохранить резервную копию примерно так:

perl -pi.bak -e 's/foo/bar/g;' *.txt

Или трубопровод:

cat file.txt | perl -ne 's/foo/bar/g;' | less

Но это на самом деле больше работа Седа.

6 голосов
/ 01 октября 2008

Рассматривайте Ruby как альтернативу Perl. Он украл большинство однострочных аргументов командной строки Perl (-i, -p, -l, -e, -n) и автоматических установок $_ для вас, как это делает Perl, и обладает большим количеством регулярных выражений. Кроме того, синтаксис Ruby может быть более удобным и легким для чтения или записи, чем в Perl или sed. (Или нет, в зависимости от ваших вкусов.)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

против

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

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

5 голосов
/ 01 октября 2008

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

...