Avec un sed GNU:
find . -type f -print0 | xargs -0 sed -i /KeyWord/d
Avec un sed OSX:
find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d
La première commande find
recherche tous les fichiers standard (pas les répertoires, les canaux ou etc.), les imprime séparés par \0
(afin que les noms de fichiers puissent contenir des espaces, des nouvelles lignes, etc.).
La deuxième commande xargs
lit la sortie de find
, récupère une liste basée sur un séparateur (à \0
cause de -0
), appelle sed -i [...]
avec des paramètres ajoutés à partir de la liste ( sed
sera appelée plusieurs fois s'il y a beaucoup de fichiers, car la longueur maximale des paramètres est limitée dans chaque invocation).
La sed
commande modifie in-place ( -i
).
Quant à /KeyWord/d
, il supprimera les lignes contenant l'expression régulière KeyWord
.
Vous devez apprendre sed
à bien comprendre la syntaxe (simple mais inhabituelle) et vous référer aux pages de manuel appropriées pour plus d'informations sur les outils impliqués ici.
Et comme j'aime promouvoir zsh
, la solution avec ses globes étendus:
sed -i /KeyWord/d **/*(.)