Заміна декількох ліній в sed або awk [закрито]


9

Я намагаюся використовувати sed або awk для заміни 5 рядків у файлі smb, але я просто не маю уявлення, як боротися з новими рядками.


6
f звичайно, sed і awk можуть це зробити, але у мене виникають невеликі проблеми з розумінням того, що саме у вас є питання. Що саме завдає вам клопоту? Вставка нових рядків? Замінивши їх?
frabjous

Відповіді:


19

Sed досить погано в цьому, оскільки він працює по одній лінії за раз. Єдина гідна техніка, яку я коли-небудь бачив це робити, це ця , яка передбачає збереження всього файлу в буфері утримування 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встановлює роздільник записів на нуль, тому весь файл буде прочитаний одразу замість рядка за рядком. -pзмушує друкувати результат після заміни. -eчи слід взяти наступний аргумент як вираз для запуску, і s/search/replace/це вираз
Майкл Мрозек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.