GNU/Linux >> Tutoriels Linux >  >> Linux

Ligne de commande :rechercher et remplacer dans tous les noms de fichiers correspondant à grep

Voulez-vous dire rechercher et remplacer une chaîne dans tous les fichiers correspondant à grep ?

perl -p -i -e 's/oldstring/newstring/g' `grep -ril searchpattern *`

Modifier

Comme cela semble être une question assez populaire, j'ai pensé que je mettrais à jour.

Aujourd'hui, j'utilise principalement ack-grep car c'est plus convivial. Donc la commande ci-dessus serait :

perl -p -i -e 's/old/new/g' `ack -l searchpattern`

Pour gérer les espaces dans les noms de fichiers, vous pouvez exécuter :

ack --print0 -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

vous pouvez faire plus avec ack-grep . Supposons que vous souhaitiez limiter la recherche aux fichiers HTML uniquement :

ack --print0 --html -l searchpattern | xargs -0 perl -p -i -e 's/old/new/g'

Et si l'espace blanc n'est pas un problème, c'est encore plus court :

perl -p -i -e 's/old/new/g' `ack -l --html searchpattern`
perl -p -i -e 's/old/new/g' `ack -f --html` # will match all html files

Cela semble être ce que vous voulez, d'après l'exemple que vous avez donné :

sed -i 's/foo/bar/g' *

Il n'est pas récursif (il ne descendra pas dans les sous-répertoires). Pour une belle solution remplaçant les fichiers sélectionnés dans un arbre, j'utiliserais find :

find . -name '*.html' -print -exec sed -i.bak 's/foo/bar/g' {} \;

Le *.html est l'expression à laquelle les fichiers doivent correspondre, le .bak après le -i fait une copie du fichier original, avec une extension .bak (cela peut être n'importe quelle extension que vous aimez) et le g à la fin de l'expression sed indique à sed de remplacer plusieurs copies sur une ligne (plutôt que la première uniquement). Le -print à trouver est une commodité pour montrer quels fichiers ont été mis en correspondance. Tout cela dépend des versions exactes de ces outils sur votre système.


Linux
  1. Comment supprimer des fichiers et des répertoires sous Linux à partir de la ligne de commande

  2. Comment diviser et combiner des fichiers à partir de la ligne de commande sous Linux

  3. Tester la recherche et le remplacement Sed récursifs avant l'exécution ?

  4. Comment remplacer toutes les occurrences d'un mot dans tous les fichiers dans la ligne de commande Linux

  5. Comment remplacer une chaîne dans plusieurs fichiers en ligne de commande Linux

Comment supprimer des fichiers et des répertoires à l'aide de la ligne de commande Linux

Comment effectuer une recherche de modèle dans les fichiers à l'aide de Grep

Comment rechercher des fichiers à partir de la ligne de commande Linux

Recherche des fichiers et dossiers les plus volumineux dans la ligne de commande Linux

Comment effectuer une recherche Grep sur tous les fichiers et dans tous les répertoires

Principes de base de la ligne de commande Linux - Travailler avec des fichiers et des répertoires