Ich benutze a und i in sed Skripte oft, aber wie man sie in der Regel in einem Einzeiler (oder genauer gesagt, Ende des Textes zu verwenden)Sed: Mit a, c oder i in einem Einzeiler
Ich habe versucht, den Text zu zitieren, eine neue Zeile char hinzufügen, um das Ende des Textes zu bedeuten, die neue Zeile zu entkommen; Nichts funktioniert, sed behandelt einfach alle Zeichen bis zum Ende der Shell-Zeile als Text, mit dem man arbeiten kann.
Dies führt zu einem Problem, wenn Sie weitere Aktionen ausführen, da diese als Text und nicht als Befehle für sed behandelt werden, z. B. p.
Das ist in Ordnung:
/RANGE_start/,/RANGE_end/{
s/foo/bar/
/RANGE_end/a \--- This is the end of the range block ---
p
}
Dies funktioniert nicht gut:
/RANGE_start/,/RANGE_end/{s/foo/bar/;/RANGE_end/a \--- This is the end of the range block ---; p}
wo der Ausgang
ist --- Dies ist das Ende des Bereichs blockieren - -; p}
oder, da ich versuche, p zu verwenden, keine Ausgabe (vorausgesetzt, sed wurde mit -n gestartet).
Gibt es ein spezielles Zeichen, das ich an a übergeben kann, c und ich, um das Ende des Textes zu bezeichnen?
(BTW, ist dies nicht nur um Einzeiler, (in einer anderen Frage, die ich fragen), ist es auch in einer Datei über das Schreiben mit w, wo der Text nicht in die Datei geschrieben bekommt.)
[Ich vermute, dass ich einige Gnu-Details oben verwende.]
produziert Ihr Standard 'sed' Ausgang für' sed --version'? Bitte fügen Sie das zu Ihrem Q hinzu. Wenn nicht, UND, da Sie Ihr Q mit 'unix' getaggt haben, kann Ihr sed eine alte Version sein, die' \ a \, i \, c \ .' erfordert, um die letzten Zeichen auf dem zu sein Zeile, gefolgt von add, ins, oder ändern Sie den Text in separaten Zeilen, bis eine leere Zeile die "Eingabe" für diese Operation beendet. Ein Liner wird, IMHO, stark überbewertet. Warte, bis du den Oneliner von jemand anderem verbessern musst, wenn du etwas Code übernimmst, dann magst du sie nicht so sehr, aber ja, manchmal wegen anderer Tools-Einschränkungen brauchst du den One-Liner ;-). Viel Glück! – shellter
One-Liner ist ein abwertender Ausdruck - es ist kein Ziel, um jeden Preis erreicht werden.Wenn Sie in meinem Buch die Befehle "a", "c", "i" in "sed" verwenden, verzichten Sie auf die "Einzeiler" -Optionen. Wenn Sie das Gefühl haben, dass Sie GNU 'sed' benutzen müssen und verwenden, können Sie jede 'Zeile' in ein separates '-e'-Argument setzen, wobei alle außer der letzten mit einem Backslash enden:' sed -e' 1a \ '-e' line1 \ '-e' line2-and-final'' - wenn du BSD (Mac OS X) 'sed' benutzt, funktioniert das auch nicht. Sie können das Skript 'sed' immer in eine Datei einfügen und dann 'sed -f sed.script files *' verwenden, um die Dateien mit dem Skript zu bearbeiten. –