Est-il sed comme utilitaire pour cmd.exe? [fermé]

je veux modifier le contenu du fichier par programmation en utilisant la ligne de commande de windows ( cmd.exe ). Dans * nix il y a sed pour ces tâches. Est-il utile d'équivalent dans windows?

Edit: je suis à la recherche pour les natifs de la ligne de commande de la solution.

130
demandé sur peterh 2008-09-24 18:01:42

17 réponses

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 Zain Naboulsis entrée de blog .

94
répondu Jakub Šturc 2016-04-13 17:04:48

sed (et son genre) sont contenus dans plusieurs paquets de commandes Unix.

si vous ne voulez pas installer quoi que ce soit et que votre système n'est pas un serveur Windows, alors vous pouvez utiliser un langage de script (VBScript par exemple) pour cela. Ci-dessous est une brute, hors-la-brassard coup de couteau à elle. Votre ligne de commande ressemblerait à

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

où oldpat et newpat sont Microsoft vbscript regex patterns . De toute évidence, je n'ai mis en œuvre remplacer le commandement et assumer certaines choses, mais vous pourriez étoffer cela pour être plus intelligent et comprendre plus de 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
81
répondu b w 2018-03-08 07:33:59

UnxUtils fournit sed pour Win32, comme le fait GNUWin32 .

21
répondu Adam Hughes 2008-09-24 14:05:15

si vous ne voulez pas installer quoi que ce soit (je suppose que vous voulez ajouter le script dans une solution/programme/etc qui sera exécuté dans d'autres machines), vous pouvez essayer de créer un script vbs (disons, remplacer.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 l'exécutez comme ceci:

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

qui est similaire à la version sed fournie par" bill weaver", mais je pense que celui-ci est plus convivial en termes de caractères spéciaux ('>

Je ne l'ai pas écrit, mais je ne me souviens pas d'où je l'ai eu.

17
répondu Rober 2013-05-02 17:20:52

il y a Super Sed une version améliorée de sed. Pour Windows c'est un standalone .exe, destiné à s'échapper de la ligne de commande.

9
répondu Rob Kam 2009-05-26 20:39:16

essaie de péter.EXE. C'est un utilitaire Find-and-replace-text qui peut être utilisé dans les programmes de commandes batch.

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

7
répondu Colin Nicholls 2012-07-18 21:23:21

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

6
répondu robintw 2008-09-24 14:03:12

essayez powershell. Il y a des commandes get-content et set-content que vous pouvez utiliser.

6
répondu James Boother 2008-09-24 14:11:24

j'utilise Cygwin . Je rencontre beaucoup de gens qui ne se rendent pas compte que si vous mettez les binaires Cygwin sur votre chemin, vous pouvez les utiliser à partir de L'interpréteur de commandes Windows. Tu n'as pas à courir la fête de Cygwin.

vous pouvez également regarder dans Services Windows Pour Unix disponible auprès de Microsoft (mais seulement sur les versions professionnelles et supérieures de Windows).

6
répondu Brandon DuRette 2008-09-24 14:11:32
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt

c'est le comportement de

sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
5
répondu krogon 2013-11-05 12:35:37

edlin ou de modifier des

plus il y a des Services Windows Pour Unix qui est livré avec de nombreux outils unix pour windows. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx

mise à jour 12/7/12 Dans Windows 2003 R2, Windows 7 & Server 2008,etc. ce qui précède est remplacé par le sous-système pour les Applications basées sur UNIX (SUA) en tant qu'add-on. Mais vous devez télécharger les utilitaires: http://www.microsoft.com/en-us/download/details.aspx?id=2391

4
répondu Booji Boy 2012-12-07 21:21:48

vous pouvez regarder outils GNU , ils fournissent (entre autres choses) sed sur windows.

3
répondu Linor 2008-09-24 14:03:38

autant que je sache, rien de tel que sed n'est empaqueté avec des fenêtres. Cependant, sed est disponible pour Windows sous différentes formes, y compris dans le cadre de Cygwin, si vous voulez un sous-système POSIX complet, ou comme un exécutable natif Win32 si vous voulez lancer juste sed sur la ligne de commande.

Sed pour Windows (GnuWin32 Projet)

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

2
répondu Jay 2008-09-24 14:08:31

Cygwin works, mais ces utilitaires sont également disponibles. Juste plop sur votre disque dur, mettre le répertoire dans votre chemin, et vous avez beaucoup de votre aimable utilitaires unix. Poids léger IMHO que Cygwin (bien que cela fonctionne tout aussi bien).

1
répondu Mark 2008-09-24 14:06:43

Il ya un fichier Helper batch pour Windows appelé repl.bat qui a une grande partie de la capacité de SED, mais doesn't require any additional download ou l'installation. Il s'agit d'un fichier batch hybride qui utilise Jscript pour mettre en œuvre les fonctionnalités et est donc swift , et doesn't suffer from the usual poison characters de traitement par lots et traite les lignes vierges avec facilité.

télécharger repl de - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

le l'auteur est @dbenham de stack overflow et dostips.com

un autre fichier de lot helper 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 de lot hybride. Elle partage les bénéfices de la repl.MTD

télécharger findrepl de - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat

l'auteur est @aacini de débordement de la pile et dostips.com

1
répondu foxidrive 2013-11-05 13:04:14

j'avais besoin d'un outil sed qui fonctionnait pour le cmd Windows.exe invite. Eric Pement du port de sed à un seul DOS .exe a bien fonctionné pour moi.

C'est assez bien documenté .

1
répondu bryan kennedy 2015-01-01 14:48:51

cela fonctionne sur Vista Ultimate, pas sûr Pro.

sed-F commandfilename.cmd fichier1 > fichier2

0
répondu 2009-05-14 20:31:48