Existe-t-il un utilitaire similaire à sed pour cmd.exe? [fermé]
La solution
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, consultez le blog de Zain Naboulsis entrée .
Autres conseils
sed
(et son équivalent) sont contenus dans plusieurs packages de commandes Unix.
- Cygwin fonctionne mais est gigantesque.
- UnxUtils est beaucoup plus mince.
- GnuWin32 est un autre port qui fonctionne.
- Une autre alternative est le système UWIN d'AT; T Research; / li>
- MSYS de MinGw est une autre option.
- Le sous-système Windows pour Linux est le plus " natif " option, mais il n'est pas installé sur Windows par défaut; il a
grep
,-z
etc. hors de la boîte, cependant. - https://github.com/mbuilov/sed-windows offre les versions 4.3 et 4.4 récentes. versions, qui prennent en charge <=> option contrairement à l'option ports supérieurs répertoriés
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 (VBScript, par exemple) pour cela. 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 Modèles de regex vbscript Microsoft . Bien entendu, j’ai seulement implémenté la commande de substitution et pris en charge certaines choses, mais vous pourriez en dire plus pour être plus intelligent et mieux comprendre la <=> ligne de commande.
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 souhaitez rien installer (je suppose que vous voulez ajouter le script à une solution / programme / etc qui sera exécuté sur d’autres machines), vous pouvez essayer de créer un script vbs (disons, remplacez. 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 lancez comme ceci:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
Ce qui est similaire à la version sed fournie par & "; Bill Weaver &" ;, mais je pense que celui-ci est plus convivial en termes de spécial ('> < / ) caractères.
Btw, je n'ai pas écrit ça, mais je ne me souviens pas d'où je l'ai eu.
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.
Essayez fart.exe. Il s’agit d’un utilitaire de recherche et de remplacement de texte utilisable dans les programmes de commandes en mode batch.
> (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
Vous pouvez installer Cygwin ( http://www.cygwin.com/ ) et l'utiliser à partir de là. .
Vous pouvez essayer PowerShell. Il existe get-content et Les commandlets set-content sont une construction que vous pouvez utiliser.
J'utilise Cygwin . Je rencontre beaucoup de gens qui ne réalisent pas que si vous placez les fichiers binaires Cygwin sur votre 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).
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 & Amp; Server 2008, etc., ce qui précède est remplacé par le sous-système pour 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 consulter les Outils GNU , qui fournissent (entre autres choses) sed sous Windows.
Il existe un fichier de commandes auxiliaire pour Windows appelé repl.bat
qui présente une grande partie de la capacité de SED, mais doesn't require any additional download
ou d'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 doesn't suffer from the usual poison characters
du traitement par lots, qui gère facilement les lignes vides.
Téléchargez repl
à partir de - 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 des capacités de GREP
et est également basé sur findrepl
et est également un fichier batch hybride. Il partage les avantages de repl.bat
Téléchargez <=> à partir de - https://www.dropbox.com/s/ rfdldmcb6vwi9xc / findrepl.bat
L'auteur est @aacini à partir du débordement de la pile et de dostips.com
Pour autant que je sache, rien n’est comparable à sed qui est livré avec Windows. Toutefois, sed est disponible pour Windows sous différentes formes, notamment dans Cygwin, si vous souhaitez un sous-système POSIX complet, ou sous la forme d’un exécutable natif Win32 si vous souhaitez exécuter sed uniquement en 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.
Cygwin fonctionne, mais les 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. Un IMHO plus léger que Cygwin (bien que cela fonctionne aussi bien).
J'avais besoin d'un outil sed qui répondait à l'invite Windows cmd.exe. Le port de sed par Eric Pement sur un seul fichier .exe a fonctionné à merveille pour moi. .
C’est plutôt bien documenté .
Cela fonctionne sur Vista Ultimate, pas sûr de Pro.
sed -f commandfilename.cmd file1 > file2