GNU/Linux >> Tutoriels Linux >  >> Linux

Recherche et remplacement récursifs dans les fichiers texte sur Mac et Linux

Pour le mac, une approche plus similaire serait celle-ci :

find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"

Comme solution alternative, j'utilise celle-ci sur Mac OSX 10.7.5

grep -ilr 'old-word' * | xargs [email protected] sed -i '' 's/old-word/new-word/g' @

Le crédit revient à :la réponse de Todd Cesere


OS X utilise un mélange d'outils BSD et GNU, il est donc préférable de toujours vérifier la documentation (même si je l'avais less n'était même pas conforme à la page de manuel d'OS X) :

https://web.archive.org/web/20170808213955/https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/sed.1.html

sed prend l'argument après -i comme extension pour les sauvegardes. Fournissez une chaîne vide (-i '' ) pour aucune sauvegarde.

Ce qui suit devrait faire :

find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +

Le -type f est juste une bonne pratique ; sed se plaindra si vous lui donnez un répertoire ou autre.

-exec est préféré à xargs; vous n'avez pas besoin de vous embêter avec -print0 ou quoi que ce soit.

Le {} + à la fin signifie que find ajoutera tous les résultats en tant qu'arguments à une instance de la commande appelée, au lieu de la réexécuter pour chaque résultat. (Une exception est lorsque le nombre maximal d'arguments de ligne de commande autorisés par le système d'exploitation est dépassé ; dans ce cas, find exécutera plus d'une instance.)

Si vous obtenez une erreur telle que "séquence d'octets non valide", il peut être utile de forcer les paramètres régionaux standard en ajoutant LC_ALL=C au début de la commande, comme ceci :

LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/g {} +


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

  2. Utilisez Find and Locate pour rechercher des fichiers sous Linux

  3. Linux Supprimer des fichiers et des répertoires

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

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

Comment comparer et fusionner des fichiers texte sous Linux

Comment comparer et fusionner des fichiers texte sous Linux (partie 2)

Comment trouver des fichiers contenant une chaîne de texte spécifique sous Linux

Partagez facilement des fichiers entre Linux, Windows et Mac à l'aide de NitroShare

Linux recherche une chaîne dans des dossiers et des fichiers avec ack

Recherche et remplacement MySQL