Grep: Suche und ersetze die ganze Zeile


13

Der Befehl

 grep "foo" myfile.txt

druckt alle übereinstimmenden Zeilen in meiner Datei.

Jetzt möchte ich die ganze Zeile durch eine andere Zeichenfolge ersetzen . Wie kann ich das machen?

Antworten:


13

Wenn Sie mit einer Teilzeichenfolge der gesamten Zeile übereinstimmen, können Sie entweder den sBefehl sed mit einem regulären Ausdruck verwenden, um den Rest der Zeile zu entfernen:

sed -i 's/^.*foo.*$/another string/' myfile.txt

Oder verwenden Sie den cBefehl, um die übereinstimmende Zeile auf einmal zu ersetzen:

sed -i '/foo/ { c \
another string
}' myfile.txt

Wenn Sie an der Eingabeaufforderung keine mehrzeiligen Befehle eingeben möchten, können Sie diese stattdessen in ein Skript einfügen:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

Vielen Dank! Wenn ich die zweite Option benutze, erhalte ich: sed: -e expression # 1, char 0: unmatched `{'
clamp

am Ende der ersten Zeile, müssen Sie \ eingeben und dann drücken Sie Return - es ist wichtig , dass die \ entkommt , dass erste Newline. Stellen Sie dann sicher, dass sich das }'in einer separaten Zeile von befindet another string: Das Ersetzen ist alles in dieser zweiten Zeile, einschließlich des, }wenn Sie es dort ablegen.
Nutzlos

-1

Sie können die Inplace- Funktionalität von sed verwenden :

sed -i -e 's/foo/bar/' myfile.txt

Dies ersetzt nur jeden foomit barnicht der ganzen Zeile ..
Jahid
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.