Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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                используйте расширенные регулярные выражения в script.

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

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

Ответ 2

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

Но это действительно более сложная работа.

Ответ 3

Рассмотрим Ruby как альтернативу Perl. Он украл большинство команд командной строки Perl one-liner args (-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

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

Ответ 4

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