Какой инструмент командной строки GNU/Linux я буду использовать для выполнения поиска и замены в файле?
Какой инструмент командной строки GNU/Linux я буду использовать для выполнения поиска и замены в файле?
Можно ли указать текст поиска и замену в формате регулярного выражения?
Ответ 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. (Или нет, в зависимости от ваших вкусов.)
Во многих случаях, когда речь идет об однострочных играх, производительность недостаточна для того, чтобы заботиться о том, используете ли вы легкий или тяжелый Perl или тяжелый вес Ruby. Используйте все, что проще всего написать.
Ответ 4
sed, редактор потока, и да, он использует регулярное выражение.