Ersetzen mehrerer Zeilen in sed oder awk [geschlossen]


9

Ich versuche, mit sed oder awk 5 Zeilen in einer smb-Datei zu ersetzen, aber ich habe keine Ahnung, wie ich mit den Zeilenumbrüchen umgehen soll.


6
Natürlich können sed und awk das, aber ich habe ein wenig Probleme, genau zu verstehen, was Ihre Frage ist. Was genau macht dir Ärger? Neue Zeilen einfügen? Ersetzen sie?
— Frabjous

Antworten:


19

Sed ist ziemlich schlecht darin, weil es eine Leitung nach der anderen betreibt. Die einzige anständige Technik, die ich jemals gesehen habe, ist diese , bei der die gesamte Datei im Haltepuffer von sed gespeichert und dann auf einmal bearbeitet wird:

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

Wenn Sie können, ist es viel einfacher, Perl zu verwenden, um dies zu erreichen:

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

searchkann \ns enthalten , um Zeilenumbrüche darzustellen


1
+1 für den sedMultiliner.
— Lazer

Können Sie erklären, was die Befehlszeilenargumente für Perl tun?
— Michael

1
@Michael -0setzt das Datensatztrennzeichen auf null, sodass die gesamte Datei auf einmal anstatt zeilenweise gelesen wird. -pLässt das Ergebnis nach der Ersetzung drucken. -emuss das nächste Argument als Ausdruck verwendet werden, und s/search/replace/ist dieser Ausdruck
— Michael Mrozek
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.