52 votes

commande sed en exécution à sec

Comment est-il possible de faire un essai avec sed ?

J'ai cette commande :

 find ./ -type f | xargs sed -i 's/string1/string2/g'

Mais avant de vraiment substituer dans tous les fichiers, je veux vérifier ce qu'il substituerait. Copier toute la structure du répertoire pour vérifier n'est pas une option !

38voto

SiegeX Points 32614

Supprimez le -i et redirigez-le vers less pour paginer les résultats. Alternativement, vous pouvez rediriger le tout vers un fichier volumineux en supprimant le -i et en ajoutant > dryrun.out

Je dois noter que ce script échouera lamentablement avec des fichiers qui contiennent des espaces dans leur nom ou d'autres caractères néfastes comme des sauts de ligne ou autres. Une meilleure façon de le faire serait :

 while IFS= read -r -d $'\0' file; do
  sed -i 's/string1/string2/g' "$file"
done < <(find ./ -type f -print0)

19voto

user1885518 Points 495

Je préférerais utiliser l'option p :

 find ./ -type f | xargs sed 's/string1/string2/gp'

Peut être combiné avec le paramètre --quiet pour une sortie moins détaillée :

 find ./ -type f | xargs sed --quiet 's/string1/string2/gp'

De man sed :

p :

Imprimez l'espace de motif actuel.

--calmer:

supprimer l'impression automatique de l'espace du motif

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X