Замена нескольких строк в sed или awk [закрыто]

9

Я пытаюсь использовать sed или awk для замены 5 строк в файле smb, но я просто не знаю, что делать с символами новой строки.

glisignoli
источник
6
Конечно, sed и awk могут это сделать, но у меня возникли небольшие проблемы с пониманием того, в чем именно заключается ваш вопрос. Что именно доставляет вам неприятности? Вставка новых строк? Заменить их?
безумно

Ответы:

19

Сед довольно плохо в этом, потому что он работает по одной строке за раз. Единственный приличный метод, который я когда-либо видел, чтобы сделать это, это тот , который включает в себя сохранение всего файла в удерживающем буфере Sed, а затем работает с ним все сразу:

sed -n '1h;1!H;${g;s/search/replace/;p;}'

Если вы можете, гораздо проще использовать Perl для этого:

perl -0pe 's/search/replace/'

searchможет содержать \ns для представления новых строк

Михаил Мрозек
источник
1
+1 за sedмультилинер.
Лазер
Можете ли вы объяснить, что делает аргументы командной строки для Perl?
Майкл
1
@Michael -0устанавливает в качестве разделителя записей значение null, поэтому весь файл будет читаться сразу, а не построчно. -pзаставляет печатать результат после замены. -eимеет ли следующий аргумент в качестве выражения для запуска, и s/search/replace/это выражение
Майкл Мрозек