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?

Klemme
quelle

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