Rechercher et remplacer du texte dans plusieurs documents à partir de la ligne de commande

Si vous êtes à l'aise avec la ligne de commande et que vous devez trouver et remplacer un mot, une expression, une URL ou un caractère dans un groupe de documents texte multiples, perl fait très bien l'affaire. Une chaîne de commande simple effectuera très rapidement une recherche et un remplacement groupés par lots sur du texte, que ce soit dans un document unique ou dans un groupe de plusieurs documents.

Comme beaucoup de choses dans la ligne de commande, il n'y a pas de processus de confirmation, donc vous devez vous assurer que votre syntaxe est correctement définie avant d'initier une commande, sinon vous devrez faire une autre recherche et remplacement pour réparer votre faute.

La syntaxe de base de la commande est la suivante:

perl -pi -w -e 's/THIS/THAT/g;' /path/to/files*.txt

Pour un seul exemple de mot, si vous devez remplacer toutes les instances de "ogre" par "cornbread" dans chaque fichier .txt dans le dossier "Documents", alors vous utiliserez la commande suivante:

perl -pi -w -e 's/ogre/cornbread/g;' ~/Documents/*.txt

Supposons que nous allons remplacer toute la phrase "The Chocolate Factory" par "The Wizard of Oz" dans un groupe de fichiers .txt commençant par "Films" stockés dans les documents. annuaire:

perl -pi -w -e 's/The Chocolate Factory/The Wizard of Oz/g;' ~/Documents/Films*.txt

La recherche et le remplacement sont effectués immédiatement. Vous pouvez revérifier la modification en utilisant cat et grep pour vérifier:

cat ~/Documents/Films124.txt |grep "Wizard of Oz"

Certes, c'est assez avancé, et oui, la recherche et le remplacement par lots de plusieurs documents peuvent être effectués de manière plus conviviale via des applications graphiques comme TextWrangler et BBEdit, mais parfois la ligne de commande est plus rapide pour des tâches rapides comme celles-ci. sont similaires, plus il ne nécessite aucun téléchargement supplémentaire à utiliser.

Un grand bravo à Lifehacker pour l'excellent tour.

Mise à jour : La commande 'sed' est une autre façon de faire une recherche rapide et de la remplacer par la ligne de commande. Couvrir sed est principalement un sujet pour un autre article, mais la syntaxe de base de l'utilisation de sed pour cette tâche est un peu plus simple et donc plus facile à retenir:

sed -i 's/THIS/THAT/g' /path/to/files*.txt

Il n'y a pas de bonne ou de mauvaise façon, alors que vous utilisiez perl ou sed devient une question de préférence personnelle.