Gibt es eine für cmd.exe wie Dienstprogramm sed? [geschlossen]
Lösung
Heute Powershell hat mich gerettet.
Für grep
gibt es:
get-content somefile.txt | where { $_ -match "expression"}
und für sed
gibt es:
get-content somefile.txt | %{$_ -replace "expression","replace"}
Weitere Einzelheiten finden Sie unter Zain Naboulsis Blog Eintrag .
Andere Tipps
sed
(und seine ilk) sind innerhalb von mehreren Paketen von Unix-Befehle enthalten.
- Cygwin funktioniert, aber ist gigantisch.
- UnxUtils ist viel schlanker.
- GnuWin32 ist ein weiterer Hafen, das funktioniert.
- Eine weitere Alternative ist AT & T Research UWIN System .
- MSYS von mingw ist noch eine weitere Option.
- Windows-Subsystem für Linux ist eine sehr "native" Option, aber es ist nicht installiert auf Windows standardmäßig; es hat
sed
,grep
usw. aus dem Kasten heraus, though. - https://github.com/mbuilov/sed-windows bietet kürzlich 4.3 und 4.4 Versionen, die
-z
Option unterstützt im Gegensatz zu oben aufgeführten Ports
Wenn Sie nichts installieren möchten, und Ihr System ist keine Windows Server ein, dann Sie könnte verwenden, um eine Skriptsprache (VBScript zum Beispiel) dafür. Im Folgenden finden Sie eine grobe, off-the-Manschette stechen sie an. Ihre Befehlszeile würde wie folgt aussehen
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
Dabei gilt oldpat und newpat sind Microsoft Vbscript regex Muster . Offensichtlich habe ich implementiert nur den Ersatz Befehl und nahm einige Dinge, aber man kann es Fleisch aus intelligenter sein und mehr von der sed
Befehlszeile verstehen.
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
Wenn Sie nichts installieren wollen (ich nehme an, Sie wollen das Skript in eine Lösung / Programm hinzufügen / etc, die in anderen Maschinen ausgeführt werden), könnten Sie versuchen, einen vbs-Skript erstellen (können sagen, ersetzen. 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
Und Sie führen Sie es wie folgt aus:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
, die an die sed-Version ähnlich ist von „bill Weber“ zur Verfügung gestellt, aber ich denke, dass dieser in Bezug auf besondere freundlicher ist (‘> ) Zeichen.
Btw, ich habe das nicht schreiben, aber ich kann mich nicht erinnern, wo ich es her habe.
Es gibt Super-Sed eine erweiterte Version von sed . Für Windows ist dies eine eigenständige EXE, die für von der Kommandozeile ausgeführt wird.
Versuchen fart.exe. Es ist eine Suche-und-Ersetzen-Text-Dienstprogramm, das in Befehl Batch-Programme verwendet werden können.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
Dies ist das Verhalten von
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Sie könnten Cygwin installieren ( http://www.cygwin.com/ ) und die Verwendung von dort sed .
Sie könnten versuchen, Powershell. Es gibt get-content und set-Inhalt Commandlets bauen, dass Sie nutzen könnten.
Ich verwende Cygwin . Ich laufe in eine Menge Leute, die nicht erkennen, dass, wenn Sie die Cygwin-Binärdateien auf Ihrem Weg legen, können Sie sie im Windows Shell-Befehl verwenden können. Sie müssen nicht Cygwin Bash ausgeführt werden.
Sie auch in Windows Services für Unix aussehen könnte von Microsoft erhältlich; (aber nur auf die Professional und über Versionen von Windows).
edlin oder bearbeiten
dazu gibt es Windows Services für Unix, die mit für Windows viele Unix-Tools kommt. http://technet.microsoft.com/en-us/interopmigration/bb380242. aspx
Update 12/7/12 In Windows 2003 R2, Windows 7 und Server 2008 usw. die oben wird durch das Subsystem für UNIX-basierte Anwendungen (SUA) als Add-on ersetzt. Aber müssen Sie die Dienstprogramme herunterladen: http://www.microsoft.com/en-us/ Download / details.aspx? id = 2391
Sie aussehen könnte unter GNU-Tools , bieten sie (unter anderem) sed auf Fenster.
Es gibt einen Helfer Batch-Datei für Windows namens repl.bat
, die viel von der Fähigkeit der SED aber doesn't require any additional download
oder Installation hat. Es ist eine Hybrid-Batchdatei, die Jscript
die Funktionen zu implementieren verwendet und so ist swift
und doesn't suffer from the usual poison characters
die Batch-Verarbeitung und Griffe Leerzeilen mit Leichtigkeit.
Download repl
aus - https://www.dropbox.com/s/qidqwztmetbvklt/ repl.bat
Der Autor ist @dbenham von Stack-Überlauf und dostips.com
Eine weiterer Helfer Batch-Datei namens findrepl.bat
gibt die Windows-Benutzer viel von der capabilty von GREP
und auch auf Jscript
basiert und ist ebenfalls eine Hybrid-Batch-Datei. Es teilt sich die Vorteile der repl.bat
Download findrepl
aus - https://www.dropbox.com/s/rfdldmcb6vwi9xc/ findrepl.bat
Der Autor ist @aacini von Stack-Überlauf und dostips.com
Soweit ich weiß nichts wie sed mit Windows gebündelt. Allerdings ist sed für Windows in verschiedenen Formen zur Verfügung, darunter im Rahmen von Cygwin, wenn Sie ein vollständigen POSIX-Subsystem wollen, oder als Win32 nativen ausführbaren wenn Sie nur sed auf der Kommandozeile ausgeführt werden sollen.
Sed für Windows (GnuWin32 Project)
Wenn es sich bei Windows nativ sein muss dann die einzige andere, was ich vorschlagen kann, wäre eine Skriptsprache, die von Windows unterstützt zu verwenden, ohne Add-ons, wie VBScript.
Cygwin funktioniert, aber diese Dienstprogramme sind ebenfalls erhältlich. plop sie nur auf dem Laufwerk, setzen Sie das Verzeichnis in Ihrem Pfad, und Sie haben viele Ihrer freundlichen Unix-Utilities. Lighterweight IMHO, dass Cygwin (obwohl das funktioniert genauso gut).
Ich brauchte ein sed-Tool, das für die Windows-cmd.exe prompt gearbeitet. Eric Pement Hafen von sed auf eine einzelne DOS .exe groß für mich gearbeitet .
Es ist ziemlich gut dokumentiert .
Dies funktioniert auf Vista Ultimate, nicht sicher über Pro.
sed -f commandfilename.cmd file1 > file2