Das POSIX-Tool für Skriptbearbeitungen einer Datei (anstatt den geänderten Inhalt als Standardausgabe auszudrucken) ist ex
.
printf '%s\n' 'g/^[^C]*C[^C]*$/d' x | ex file.txt
Natürlich können Sie verwenden,sed -i
wenn Ihre Version von Sed dies unterstützt. Beachten Sie jedoch, dass dies nicht portierbar ist, wenn Sie ein Skript schreiben, das auf verschiedenen Systemtypen ausgeführt werden soll.
David Foerster fragte in den Kommentaren:
Gibt es einen Grund, warum Sie verwenden printf
und nicht echo
oder so etwas ex -c COMMAND
?
Antwort: Ja.
Für printf
vs. ist echo
es eine Frage der Portabilität; siehe Warum ist printf besser als echo? Außerdem ist es einfacher, Zeilenumbrüche zwischen Befehlen mit zu verteilen printf
.
Für printf ... | ex
vs. ex -c ...
ist es eine Frage der Fehlerbehandlung. Für diesen speziellen Befehl wäre es nicht wichtig, aber im Allgemeinen ist es so; Versuchen Sie zum Beispiel Putten
ex -c '%s/this pattern is not in the file/replacement text/g | x' filename
in einem Skript. Vergleichen Sie Folgendes:
printf '%s\n' '%s/no matching lines/replacement/g' x | ex file
Der erste hängt und wartet auf die Eingabe. Die zweite wird beendet, wenn EOF vom ex
Befehl empfangen wird , sodass das Skript fortgesetzt wird. Es gibt alternative Problemumgehungen, z. B. s///e
, die jedoch nicht von POSIX angegeben werden. Ich bevorzuge die Verwendung des oben gezeigten tragbaren Formulars.
Für den g
Befehl muss am Ende eine neue Zeile stehen, und ich bevorzuge es printf
, die Befehle zu umbrechen, anstatt eine neue Zeile in einfache Anführungszeichen einzubetten.
awk
Feldtrenners!