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


9

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


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/это выражение
Майкл Мрозек
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.