1

Я хотел бы заменить все вхождения этого в файле:

ab
ba

С этим:

a a

Я попробовал очевидное:

$ perl -i -p -e 's/ab\nba/a a/' file.txt

Без успеха. Как это сделать?

Я не могу найти какие-либо вопросы, которые правильно сформулировать этот вопрос.

1 ответ1

1

Без каких-либо других параметров -p обрабатывает ввод построчно. Ни одна строка не может содержать ничего после \n . Вы должны изменить разделитель записей:

perl -i~ -0pe 's/ab\nba/a a/' file.txt
  • -i~ изменит файл "на месте", оставив резервную копию (с именем file.txt~)
  • -0 делает символ \0 разделителем входных записей. Важно то, что он не встречается в заменяемой строке, поэтому он никогда не будет читать только ее часть.
  • -p читает запись файла по записи, и после прочтения каждого запускает код и печатает переменную по умолчанию $_
  • -e просто вводит код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .