C'è qualche utilità simile a sed per cmd.exe? [chiuso]
Soluzione
Oggi PowerShell mi ha salvato.
Per grep
c'è:
get-content somefile.txt | where { $_ -match "expression"}
e per sed
c'è:
get-content somefile.txt | %{$_ -replace "expression","replace"}
Per maggiori dettagli vedi Blog di Zain Naboulsis .
Altri suggerimenti
sed
(e il suo simile) sono contenuti in diversi pacchetti di comandi Unix.
- Cygwin funziona ma è gigantesco.
- UnxUtils è molto più sottile.
- GnuWin32 è un'altra porta che funziona.
- Un'altra alternativa è AT & amp; T sistema UWIN di T Research .
- MSYS di MinGw è ancora un'altra opzione.
- Sottosistema Windows per Linux è una quotazione &; <
grep, -z
ecc. pronto all'uso, tuttavia. - https://github.com/mbuilov/sed-windows offre le ultime 4.3 e 4.4 versioni che supportano <=> opzione a differenza porte superiori elencate
Se non vuoi installare nulla e il tuo sistema non è Windows Server, allora potresti usare un linguaggio di scripting (ad es. VBScript). Di seguito è riportato un grosso colpo al braccio. La tua riga di comando sarebbe simile a
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
dove oldpat e newpat sono Microsoft vbscript regex patterns . Ovviamente ho implementato solo il comando sostitutivo e assunto alcune cose, ma potresti renderlo più intelligente e comprendere meglio la <=> riga di comando.
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
Se non vuoi installare nulla (suppongo che tu voglia aggiungere lo script in qualche soluzione / programma / etc che verrà eseguito su altre macchine), potresti provare a creare uno script vbs (diciamo, sostituiscilo. 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
E lo esegui in questo modo:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
Che è simile alla versione sed fornita da " bill weaver " ;, ma penso che questo sia più amichevole in termini di speciale ('> < / ) caratteri.
A proposito, non l'ho scritto, ma non ricordo da dove l'ho preso.
Esiste Super Sed una versione avanzata di sed. Per Windows questo è un file .exe autonomo, progettato per essere eseguito dalla riga di comando.
Prova fart.exe. È un'utilità di ricerca e sostituzione del testo che può essere utilizzata nei programmi batch di comando.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
Questo è il comportamento di
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Potresti installare Cygwin ( http://www.cygwin.com/ ) e usare sed da lì .
Potresti provare PowerShell. Ci sono get-content e set-content buildlet di comandi che è possibile utilizzare.
Uso Cygwin . Incontro molte persone che non si rendono conto che se metti i binari Cygwin sul tuo PERCORSO, puoi usarli dalla shell dei comandi di Windows. Non è necessario eseguire Cygwin's Bash.
Puoi anche consultare Servizi Windows per Unix disponibili da Microsoft (ma solo sulle versioni Professional e precedenti di Windows).
edlin o modifica
inoltre ci sono servizi Windows per Unix forniti con molti strumenti unix per Windows. http://technet.microsoft.com/en-us/interopmigration/bb380242. aspx
Aggiornamento 12/7/12 In Windows 2003 R2, ampli & Di Windows 7; Server 2008, ecc., Quanto sopra è sostituito dal sottosistema per le applicazioni basate su UNIX (SUA) come componente aggiuntivo. Ma devi scaricare le utility: http://www.microsoft.com/en-us/ scaricare / Details.aspx? id = 2391
Puoi guardare GNU Tools , che forniscono (tra le altre cose) sed su windows.
Esiste un file batch di supporto per Windows chiamato repl.bat
che ha molte delle capacità di SED ma doesn't require any additional download
o installazione. È un file batch ibrido che utilizza Jscript
per implementare le funzionalità, così come swift
e doesn't suffer from the usual poison characters
dell'elaborazione batch e gestisce le righe vuote con facilità.
Scarica repl
da - https://www.dropbox.com/s/ qidqwztmetbvklt / repl.bat
L'autore è @dbenham dallo stack overflow e dostips.com
Un altro file batch di supporto chiamato findrepl.bat
fornisce all'utente Windows gran parte della capacità di GREP
e si basa anche su findrepl
ed è anche un file batch ibrido. Condivide i vantaggi di repl.bat
Scarica <=> da - https://www.dropbox.com/s/ rfdldmcb6vwi9xc / findrepl.bat
L'autore è @aacini dallo stack overflow e dostips.com
Per quanto ne so nulla come sed è in bundle con Windows. Tuttavia, sed è disponibile per Windows in diverse forme, anche come parte di Cygwin, se si desidera un sottosistema POSIX completo o come eseguibile nativo Win32 se si desidera eseguire solo sed dalla riga di comando.
Sed per Windows (progetto GnuWin32)
Se deve essere nativo di Windows, l'unica altra cosa che posso suggerire sarebbe quella di utilizzare un linguaggio di scripting supportato da Windows senza componenti aggiuntivi, come VBScript.
Cygwin funziona, ma sono disponibili anche queste utilità. Basta rilasciarli sul disco rigido, inserire la directory nel percorso e disporre di molte delle utili utility unix. IMHO più leggero che Cygwin (anche se funziona altrettanto bene).
Avevo bisogno di uno strumento sed che funzionasse con il prompt di Windows cmd.exe. La porta di sed di Eric Pement su un singolo DOS .exe ha funzionato perfettamente per me .
È abbastanza bene documentato .
Funziona su Vista Ultimate, non sono sicuro di Pro.
sed -f commandfilename.cmd file1 > file2