Quel est le meilleur outil pour rechercher et remplacer des expressions régulières sur plusieurs fichiers?

StackOverflow https://stackoverflow.com/questions/102083

  •  01-07-2019
  •  | 
  •  

Question

De préférence, des outils gratuits si possible.

De plus, la possibilité de rechercher plusieurs expressions régulières et de les remplacer par des chaînes différentes constituerait un bonus.

Était-ce utile?

La solution

Perl. Sérieusement, cela simplifie beaucoup les tâches de l'administrateur système. Voici un exemple:

perl -pi -e / quelque chose / quelque chose de différent / g '* .log

Autres conseils

sed est simple et rapide:

sed -e "s/pattern/result/" <file list>

vous pouvez également le rejoindre avec find:

find <other find args> -exec sed -e "s/pattern/result/" "{}" ";"

Textpad fait un bon travail sous Windows. Et c’est également un très bon éditeur.

Pour ce faire, j'ai écrit un outil de ligne de commande gratuit pour Windows. Il s’appelle rxrepl . Il prend en charge la recherche dans les fichiers et sur Unicode. Certains trouveront peut-être cela utile.

Sans surprise, Perl gère très bien ce problème, en conjonction avec un shell décent:

for file in @filelist ; do
  perl -p -i -e "s/pattern/result/g" $file
done

Cela a le même effet (mais est plus efficace et sans condition de concurrence) que:

for file in @filelist ; do
  cat $file | sed "s/pattern/result/" > /tmp/newfile
  mv /tmp/newfile $file
done

L'éditeur de répertoire d'Emacs dispose de la fonction `dired-do-query-replace-regexp 'pour rechercher et remplacer une expression rationnelle sur un ensemble de fichiers marqués.

Sous Windows, j'aimais WinGrep

Sous Ubuntu, j'utilise Regexxer.

Pour rechercher et remplacer plusieurs fichiers sous Windows, rxFind était très utile.

Pour Mac OS X, TextWrangler fait le travail.

Mon favori personnel est PowerGrep de JGSoft. Il s'interface avec RegexBuddy qui peut vous aider à créer et à tester l'expression régulière, sauvegarde automatiquement toutes les modifications (et offre des fonctionnalités d'annulation), permet d'analyser plusieurs répertoires (avec des modèles de nom de fichier) et prend même en charge les formats de fichier tels que Microsoft Word, Excel et PDF.

Capture d

Je choisirais bash + find + sed.

Vim pour le sauvetage (et président ;-)). Essayez:

vim -c "argdo! s:foo:bar:gci" <list_of_files>

(J'adore le commutateur -c de Vim, c'est magique. Ou si vous aviez déjà dans Vim et ouvert les fichiers, par exemple:

vim <list_of_files>

Il suffit d'émettre:

:bufdo! s:foo:bar:gci

Bien sûr, sed et perl sont également capables. HTH.

J'ai le luxe d'Unix et d'Ubuntu; Dans les deux cas, j'utilise gawk pour tout ce qui nécessite une recherche et un remplacement ligne par ligne, en particulier pour les sous-chaînes, ligne par ligne. Récemment, c'était le plus rapide pour traiter 1100 modifications contre des millions de lignes dans des centaines de fichiers (un répertoire) Sur Ubuntu, je suis fan de regexxer

 sudo apt-get install regexxer

Sous Windows, il existe une alternative gratuite qui fonctionne le mieux: Notepad ++

Aller à la recherche " Rechercher " - > "Rechercher dans les fichiers". On peut donner un répertoire, un modèle de fichier, définir des expressions régulières, puis prévisualiser les correspondances et enfin remplacer tous les fichiers de manière récursive.

J'aime cet outil:

http://www.abareplace.com/

vous donne un " au fur et à mesure que vous tapez " aperçu de votre expression habituelle ... FANTASTIQUE pour ceux qui ne connaissent pas bien les ER ... et il est très rapide de changer des centaines ou des milliers de fichiers à la fois ...

Et ensuite, annulez vos modifications ...

Très bien ...

Patrick Steil - http://www.podiotools.com

Si "textpad" est une réponse valide, je vous suggère Texte Sublime haut la main.

Les modifications multicouches sont un moyen encore plus efficace de remplacer les remplacements en général, mais son "a Rechercher dans les fichiers " est le niveau supérieur pour les substituts de recherche en bloc avec une expression régulière / en bloc.

La

la recherche regex jEdit dans les fichiers est assez correcte. Un peu exagéré si vous ne l'utilisez que pour cela, cependant. De plus, il ne prend pas en charge la multi-expression-remplacer que vous avez demandé.

J'ai trouvé l'outil RxFind utile (logiciel libre).

Brackets (code source, deb / Ubuntu, OSx et Windows) permet une bonne visualisation des résultats, ce qui permet de les sélectionner individuellement. appliquer la substitution. Vous pouvez rechercher par texte standard, sensible à la casse ou non, et regex. Très important: vous pouvez exclure des modèles de fichiers et de répertoires dans la recherche.

Depuis au moins 25 ans, j'utilise Emacs pour le remplacement à grande échelle de nombreux fichiers. Exécutez etags pour spécifier un ensemble de fichiers à rechercher:

$ etags file1.txt file2.md dir1/*.yml dir2/*.json dir3/*.md

Ouvrez ensuite Emacs et exécutez tags-query-replace , qui invite à la création d'une expression régulière et au remplacement:

\b\(foo\)\b
\1bar
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top