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.