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.
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 .
sed
(et son genre) sont contenus dans plusieurs paquets de commandes Unix.
- Cygwin fonctionne mais est gigantesque.
- UnxUtils est beaucoup plus mince.
- GnuWin32 est un autre port qui fonctionne.
- une autre alternative est AT&T Research UWIN system .
- MSYS de MinGw est encore une autre option.
- sous-système Windows Pour Linux est l'option la plus "native", mais il n'est pas installé sur Windows par défaut; il a
sed
,grep
etc. hors de la boîte, cependant. - https://github.com/mbuilov/sed-windows offre des versions récentes 4.3 et 4.4, qui prennent en charge
-z
option contrairement aux ports supérieurs répertoriés
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
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.
essaie de péter.EXE. C'est un utilitaire Find-and-replace-text qui peut être utilisé dans les programmes de commandes batch.
vous pouvez installer Cygwin ( http://www.cygwin.com / ) et utiliser sed à partir de là.
essayez powershell. Il y a des commandes get-content et set-content que vous pouvez utiliser.
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).
> (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
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
vous pouvez regarder outils GNU , ils fournissent (entre autres choses) sed sur windows.
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.
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
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é .