Frage

Ich möchte programmatisch Dateiinhalt mit dem Windows-Befehlszeile ( cmd.exe ) bearbeiten. In * nichts gibt es sed für diese Aufgaben. Gibt es eine nützliche Äquivalent in Windows?

Edit: Ich bin für Native Command Line-Lösung

.
War es hilfreich?

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.

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

UnxUtils bietet sed für Win32, genau wie GnuWin32 .

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 (‘>

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.

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

> (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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top