web-dev-qa-db-fra.com

Regex Replace from Ligne de commande

Est-il possible de regex remplacer à partir de la ligne de commande? En ce moment, j'utilise notepad ++ pour le faire. En ligne de commande, je ne peux utiliser que FINDSTR qui ne peut localiser que les fichiers/lignes traités

MODIFIER :
Peut-être sera-t-il possible de créer un script VB et de l'exécuter à partir de cmd? Je viens de créer un fichier "hi.vbs" avec le contenu

Msgbox "Hi Buddy"

Ensuite, cmd me permet de l'exécuter directement en tapant "hi" en ligne de commande.
Donc, si cela n’est pas possible avec un script batch, je peux utiliser un batch VB script. Ou..?

20
Aziz

va ici
http://gnuwin32.sourceforge.net/packages.html
défilez jusqu'à SED. Téléchargez coreutils aussi pendant que vous y êtes.

cette commande remplacera a par b globalement et sur chaque ligne. donc pas seulement la première fois sur la ligne.

par exemple. en utilisant sed "s/a/b/g" a.txt

C:\>type a.txt
aaaa
aaa

C:\>sed "s/a/b/" a.txt
baaa
baa

C:\>sed "s/a/b/g" a.txt
bbbb
bbb

C:\>

VBScript supporte les expressions régulières, vous pouvez le trouver et le remplacer.

dim re, s
set re = new RegExp

re.Pattern="in"
re.Global=True 'false is default
s="bin din in"
MsgBox re.Replace(s,"xxx")

Affiche bxxx dxxx xxx

11
barlop

Pour ce faire, j'ai écrit un outil de ligne de commande gratuit pour Windows. Cela s'appelle rxrepl , il supporte Unicode et la recherche de fichiers. Certains peuvent trouver cela utile.

rxrepl est un outil de ligne de commande de Microsoft Windows permettant de rechercher et de remplacer du texte dans des fichiers texte à l'aide d'expressions régulières compatibles PC Perl.

Il présente les caractéristiques suivantes:

  • Recherche à l'aide d'expressions régulières compatibles Perl
  • Utiliser la correspondance de groupe dans le texte de remplacement
  • Prend en charge les fins de ligne Windows et Unix
  • Support Unicode
  • Accepte plusieurs arguments de recherche/remplacement
  • Les options peuvent être fournies dans un fichier d'options
  • Rechercher des fichiers
  • Mode de prévisualisation
  • Modes de correspondance de ligne et de fichier complet

enter image description here

26
user2005187

Le scripteur explique comment procéder dans PowerShell (aucun téléchargement supplémentaire sur les systèmes d'exploitation Windows les plus récents, vous l'avez probablement déjà installé).

Démarrez-le, exécutez ce qui suit (pour remplacer un * par un @):

(Get-Content C:\Scripts\Test.txt) | 
Foreach-Object {$_ -replace "\*", "@"} | 
Set-Content C:\Scripts\Test.txt

Cela prend en charge les expressions régulières .NET , y compris les anticipations négatives et positives, et toutes sortes de choses que notepad ++ ne supportait pas avec regex avant la version 6.x ( autant que j'aime le bloc-notes ++).

11
Ian Pugsley

J'ai trouvé fnr.exe pour cela. Il a une interface graphique et une ligne de commande.

Un outil open source pour rechercher et remplacer du texte dans plusieurs fichiers.

Caractéristiques

  • Téléchargement de fichier unique - fnr.exe (127kb)
  • Remplacer du texte dans plusieurs fichiers à l'aide d'une application Windows ou via une ligne de commande
  • Trouver seulement pour voir où les correspondances sont trouvées
  • Recherche sensible à la casse
  • Recherche de fichiers dans un répertoire ou dans des sous-répertoires récursifs
  • Expressions régulières
  • Rechercher et remplacer du texte multiligne
  • Bouton Générer une ligne de commande pour créer un texte de ligne de commande à mettre dans un fichier de commandes
  • Aide en ligne de commande
  • Tests unitaires du moteur Rechercher/Remplacer

Affichage des options de ligne de commande

enter image description here

5
Sergius

Je suis un peu en retard pour la fête, mais JREPL.BAT est un utilitaire hybride basé sur un script JScript/batch qui s'exécute de manière native sur n'importe quelle machine Windows à partir de XP en avant.

Une documentation complète est intégrée au script, accessible via JREPL /? ou avec JREPL /?? pour une sortie paginée.

JREPL utilise une expression rationnelle ECMA standard fournie avec JScript. La regex ECMA n’est pas aussi puissante que la regex .NET disponible pour Powershell, mais c’est quand même diablement bon. Et je pense que l'utilisateur moyen trouvera cet utilitaire plus facile à utiliser que powershell.

Les options JREPL intégrées fournissent déjà beaucoup de puissance inhérente, mais la possibilité d'injecter du JScript fourni par l'utilisateur ouvre vraiment des possibilités étonnantes.

J'ai développé le script car mon lieu de travail n'autorise pas le téléchargement de fichiers exe non standard, mais il n'y a pas de restriction à l'écriture de scripts batch ou JScript :-)

Suivez simplement le lien et copiez le code du script dans un fichier nommé JREPL.BAT. Lisez les publications suivantes de ce fil pour des exemples d'utilisation et l'historique de développement. Il existe également de nombreuses réponses StackOverflow qui utilisent JREPL.BAT.

4
dbenham

On dirait que vous pouvez utiliser regex avec FINDSTR

findstr [CMD Windows] :

findstr permet de rechercher du texte (comme spécifié avec un motif dans le fichier nom-fichier. Si nom-fichier contient des caractères génériques (* ou?), il recherche dans tous les fichiers correspondants. L'option/S recherche dans le répertoire actuel ainsi Si pattern contient des espaces, vous devez le spécifier comme suit: "du texte à rechercher". Pour transformer pattern en une expression régulière, vous devez utiliser l'option/R. L'option/I recherche le cas insensible.

Dans l'aide de FindStr (Findstr /?):

/ R - Utilise les chaînes de recherche comme expressions régulières.

Regular expression quick reference:
  .        Wildcard: any character
  *        Repeat: zero or more occurrences of previous character or class
  ^        Line position: beginning of line
  $        Line position: end of line
  [class]  Character class: any one character in set
  [^class] Inverse class: any one character not in set
  [x-y]    Range: any characters within the specified range
  \x       Escape: literal use of metacharacter x
  \<xyz    Word position: beginning of Word
  xyz\>    Word position: end of Word
4
p0rkjello

Deux bons choix sont soit Cygwin , ce qui vous donnera un environnement de type Unix et bash (alternative à cmd.exe); et Unxutils , ports Win32 d’une collection d’utilitaires Unix individuels. Dans les deux packages, voir 'sed', 'awk' et 'grep'.

3
JRobert

Vous pouvez également utiliser GSAR pour effectuer une recherche et un remplacement en ligne de commande. Fonctionne aussi avec hex et binaire. Il ne fera pas le gros du travail complexe que regex peut effectuer, mais pour la recherche et le remplacement de base, il fait le travail rapidement et facilement.

0
Sun