web-dev-qa-db-fra.com

Existe-t-il un utilitaire similaire à sed pour cmd.exe?

Je souhaite modifier par programme le contenu d'un fichier à l'aide de la ligne de commande Windows ( cmd.exe ). Dans * nix, il existe sed pour cette tâche. Existe-t-il un équivalent utile dans Windows?

Edit: Je recherche une solution native en ligne de commande.

142
Jakub Šturc

Aujourd'hui, PowerShell m'a sauvé.

Pour grep il y a:

get-content somefile.txt | where { $_ -match "expression"}

et pour sed il y a:

get-content somefile.txt | %{$_ -replace "expression","replace"}

Pour plus de détails, voir entrée de blog Zain Naboulsis .

109
Jakub Šturc

sed (et son équivalent) sont contenus dans plusieurs packages de commandes Unix.

Si vous ne souhaitez rien installer et que votre système n’est pas un système Windows Server, vous pouvez utiliser un langage de script (par exemple, VBScript) pour cette. Ci-dessous se trouve un coup de poing brutal. Votre ligne de commande ressemblerait à

cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt

où oldpat et newpat sont patterns regex Microsoft vbscript . De toute évidence, je n’ai implémenté que la commande substitute et assumé certaines choses, mais vous pourriez en dire plus pour être plus intelligent et mieux comprendre la ligne de commande sed.

Dim pat, patparts, rxp, inp
pat = WScript.Arguments(0)
patparts = Split(pat,"/")
Set rxp = new RegExp
rxp.Global = True
rxp.Multiline = False
rxp.Pattern = patparts(1)
Do While Not WScript.StdIn.AtEndOfStream
  inp = WScript.StdIn.ReadLine()
  WScript.Echo rxp.Replace(inp, patparts(2))
Loop
87
b w

nxUtils fournit sed pour Win32, tout comme GNUWin32 .

23
Adam Hughes

Si vous ne voulez rien installer (je suppose que vous voulez ajouter le script dans une solution/programme/etc qui sera exécuté sur d'autres machines), vous pouvez essayer de créer un script vbs (remplaçons par exemple.vbs):

Const ForReading = 1
Const ForWriting = 2

strFileName = Wscript.Arguments(0)
strOldText = Wscript.Arguments(1)
strNewText = Wscript.Arguments(2)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileName, ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)

Set objFile = objFSO.OpenTextFile(strFileName, ForWriting)
objFile.Write strNewText
objFile.Close

Et vous le courez comme ça:

cscript replace.vbs "C:\One.txt" "Robert" "Rob"

Ce qui est similaire à la version sed fournie par "bill weaver", mais je pense que celle-ci est plus conviviale en termes de caractères spéciaux ('> </).

Au fait, je n'ai pas écrit ça, mais je ne me souviens pas d'où je l'ai tiré.

17
Rober

Il existe Super Sed une version améliorée de sed. Pour Windows, il s’agit d’un fichier .exe autonome, conçu pour être exécuté à partir de la ligne de commande.

9
Rob Kam

Essayez fart.exe. C'est un utilitaire de recherche et remplacement de texte qui peut être utilisé dans les programmes de commande par lots.

http://sourceforge.net/projects/fart-it/

7
Colin Nicholls
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt

Ceci est le comportement de

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
7
krogon

Vous pouvez installer Cygwin ( http://www.cygwin.com/ ) et utiliser sed à partir de là.

6
robintw

Tu pourrais essayer PowerShell. Il existe des commandlets get-content et set-content que vous pourriez utiliser.

6
James Boother

J'utilise Cygwin . Je rencontre un grand nombre de personnes qui ne se rendent pas compte que si vous placez les fichiers binaires Cygwin sur votre variable PATH, vous pouvez les utiliser à partir du shell de commande Windows. Vous n'êtes pas obligé de lancer Cygwin's Bash.

Vous pouvez également rechercher Windows Services for Unix disponible auprès de Microsoft (mais uniquement sur les versions professionnelle et ultérieure de Windows).

6
Brandon DuRette

edlin ou modifier

de plus, Windows Services for Unix est fourni avec de nombreux outils Unix pour Windows. http://technet.Microsoft.com/en-us/interopmigration/bb380242.aspx

Mise à jour du 12/7/12 Dans Windows 2003 R2, Windows 7 et Server 2008, etc., ce qui précède est remplacé par le sous-système pour les applications UNIX (SUA) en tant que module complémentaire. Mais vous devez télécharger les utilitaires: http://www.Microsoft.com/en-us/download/details.aspx?id=2391

4
Booji Boy

Il existe un fichier de commandes auxiliaire pour Windows appelé repl.bat qui a beaucoup de la capacité de SED mais doesn't require any additional download ou installation. Il s’agit d’un fichier de commandes hybride qui utilise Jscript pour implémenter les fonctionnalités. Il en est de même de Swift et de doesn't suffer from the usual poison characters du traitement par lots et gère facilement les lignes vierges.

Téléchargez repl depuis - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

L'auteur est @dbenham from stack overflow et dostips.com

Un autre fichier batch d'aide appelé findrepl.bat donne à l'utilisateur Windows une grande partie de la capacité de GREP et est également basé sur Jscript et est également un fichier batch hybride. Il partage les avantages de repl.bat

Téléchargez findrepl depuis - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

L'auteur est @aacini from stack overflow et dostips.com

3
foxidrive

Vous pouvez regarder GNU Tools , ils fournissent (entre autres choses) sed sur les fenêtres.

3
Linor

Autant que je sache, rien de comparable à sed n'est fourni avec Windows. Toutefois, sed est disponible pour Windows sous différentes formes, notamment dans le cadre de Cygwin, si vous souhaitez un sous-système POSIX complet, ou en tant qu’exécutable natif Win32 si vous souhaitez uniquement exécuter sed sur la ligne de commande.

Sed pour Windows (Projet GnuWin32)

S'il doit être natif de Windows, la seule autre chose que je puisse suggérer serait d'utiliser un langage de script pris en charge par Windows sans add-ons, tel que VBScript.

2
Jay

Cygwin fonctionne, mais ces utilitaires sont également disponibles. Il suffit de les placer sur votre disque, de placer le répertoire dans votre chemin et vous disposez de nombreux utilitaires Unix conviviaux. Poids IMHO plus léger que Cygwin (bien que cela fonctionne aussi bien).

1
Mark

Cela fonctionne sur Vista Ultimate, pas sûr de Pro.

sed -f commandfilename.cmd file1 > file2
0
sparkkkey

J'avais besoin d'un outil sed qui a fonctionné pour l'invite Windows cmd.exe. le portage de Eric sed en un seul fichier .exe a très bien fonctionné pour moi.

C'est plutôt bien documenté .

0
bryan kennedy