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

StackOverflow https://stackoverflow.com/questions/155934

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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[СУФФИКС], --на месте[=СУФФИКС] редактирование файлов на месте (создание резервной копии, если указано расширение)

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

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

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

Другие советы

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

Но на самом деле это в большей степени работа sed.

Рассмотрим 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.Используйте все, что проще всего написать.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top