Mit einer GNU sed:
find . -type f -print0 | xargs -0 sed -i /KeyWord/d
Mit einer OSX sed:
find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d
Der erste Befehl find
findet alle Standarddateien (nicht Verzeichnisse, Pipes usw.) und druckt sie getrennt durch \0
(Dateinamen können also Leerzeichen, Zeilenumbrüche usw. enthalten).
Zweiter Befehl xargs
liest die Ausgabe von find
, holt eine Liste basierend auf einem Trennzeichen ( \0
wegen -0
), ruft sed -i [...]
mit hinzugefügten Parametern aus der Liste auf (sed
wird mehrfach aufgerufen, wenn es viele Dateien gibt, da die maximale Länge der Parameter in begrenzt ist jeder Aufruf).
Der sed
Befehl ändert an Ort und Stelle (-i
).
Dabei /KeyWord/d
werden Zeilen gelöscht, die den regulären Ausdruck enthaltenKeyWord
.
Du solltest lernen sed
, die (einfache, aber ungewöhnliche) Syntax richtig zu verstehen, und auf den entsprechenden Hilfeseiten finden Sie weitere Informationen zu den hier verwendeten Tools.
Und wie ich gerne zsh
bewerbe, die Lösung mit ihren erweiterten Globs:
sed -i /KeyWord/d **/*(.)