Конечно, sed и awk могут это сделать, но у меня возникли небольшие проблемы с пониманием того, в чем именно заключается ваш вопрос. Что именно доставляет вам неприятности? Вставка новых строк? Заменить их?
безумно
Ответы:
19
Сед довольно плохо в этом, потому что он работает по одной строке за раз. Единственный приличный метод, который я когда-либо видел, чтобы сделать это, это тот , который включает в себя сохранение всего файла в удерживающем буфере Sed, а затем работает с ним все сразу:
sed -n '1h;1!H;${g;s/search/replace/;p;}'
Если вы можете, гораздо проще использовать Perl для этого:
perl -0pe's/search/replace/'
searchможет содержать \ns для представления новых строк
Можете ли вы объяснить, что делает аргументы командной строки для Perl?
Майкл
1
@Michael -0устанавливает в качестве разделителя записей значение null, поэтому весь файл будет читаться сразу, а не построчно. -pзаставляет печатать результат после замены. -eимеет ли следующий аргумент в качестве выражения для запуска, и s/search/replace/это выражение
Ответы:
Сед довольно плохо в этом, потому что он работает по одной строке за раз. Единственный приличный метод, который я когда-либо видел, чтобы сделать это, это тот , который включает в себя сохранение всего файла в удерживающем буфере Sed, а затем работает с ним все сразу:
Если вы можете, гораздо проще использовать Perl для этого:
search
может содержать\n
s для представления новых строкисточник
sed
мультилинер.-0
устанавливает в качестве разделителя записей значение null, поэтому весь файл будет читаться сразу, а не построчно.-p
заставляет печатать результат после замены.-e
имеет ли следующий аргумент в качестве выражения для запуска, иs/search/replace/
это выражение