Saya ingin secara terprogram mengedit konten file menggunakan baris perintah windows ( cmd.exe ). Di * nix ada sed untuk tugas ini. Apakah ada padanan asli yang berguna di windows?
Saya ingin secara terprogram mengedit konten file menggunakan baris perintah windows ( cmd.exe ). Di * nix ada sed untuk tugas ini. Apakah ada padanan asli yang berguna di windows?
Jawaban:
Hari ini Powerhell menyelamatkan saya.
Karena grep
ada:
get-content somefile.txt | where { $_ -match "expression"}
atau
select-string somefile.txt -pattern "expression"
dan untuk itu sed
ada:
get-content somefile.txt | %{$_ -replace "expression","replace"}
Untuk detail lebih lanjut lihat entri blog Zain Naboulsis .
sed
(dan sejenisnya) terkandung dalam beberapa paket perintah Unix.
sed
, grep
dll. di luar kotak, meskipun.-z
opsi tidak seperti port atas yang terdaftarJika Anda tidak ingin menginstal apa pun dan sistem Anda bukan Windows Server, maka Anda dapat menggunakan bahasa scripting (mis. VBScript) untuk itu. Di bawah ini adalah tusukan kasar, manset itu. Baris perintah Anda akan terlihat seperti
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
di mana oldpat dan newpat adalah pola regex Microsoft vbscript . Jelas saya hanya menerapkan perintah pengganti dan mengasumsikan beberapa hal, tetapi Anda bisa menyempurnakannya agar menjadi lebih pintar dan lebih memahami garis sed
perintah.
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
Jika Anda tidak ingin menginstal apa pun (saya berasumsi Anda ingin menambahkan skrip ke beberapa solusi / program / dll yang akan dijalankan di komputer lain), Anda dapat mencoba membuat skrip vbs (katakanlah, replace.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
Dan Anda menjalankannya seperti ini:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
Yang mirip dengan versi sed yang disediakan oleh "penenun tagihan", tapi saya pikir yang ini lebih ramah dalam hal karakter khusus ('> </).
Btw, saya tidak menulis ini, tapi saya tidak ingat dari mana saya mendapatkannya.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
Ini adalah perilaku
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Anda bisa mencoba PowerShell. Ada commandlets get-content dan set-content yang bisa Anda gunakan.
sed
dilakukan ;-). The -replace
Operator mungkin saran yang lebih baik.
Coba fart.exe. Ini adalah utilitas Find-and-replace-text yang dapat digunakan dalam program kumpulan perintah.
Anda dapat menginstal Cygwin ( http://www.cygwin.com/ ) dan menggunakan sed dari sana.
Saya menggunakan Cygwin . Saya bertemu dengan banyak orang yang tidak menyadari bahwa jika Anda meletakkan binari Cygwin di PATH Anda, Anda dapat menggunakannya dari dalam shell Windows Command. Anda tidak harus menjalankan Bash Cygwin.
Anda mungkin juga melihat Layanan Windows untuk Unix yang tersedia dari Microsoft (tetapi hanya pada versi Windows Profesional dan di atas).
edlin atau edit
ditambah ada Windows Services for Unix yang dilengkapi dengan banyak alat unix untuk windows. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
Pembaruan 12/7/12 Di Windows 2003 R2, Windows 7 & Server 2008, dll. Di atas diganti oleh Subsystem untuk Aplikasi Berbasis UNIX (SUA) sebagai tambahan. Tetapi Anda harus mengunduh utilitas: http://www.microsoft.com/en-us/download/details.aspx?id=2391
Ada file batch pembantu untuk Windows yang disebut repl.bat
yang memiliki banyak kemampuan tetapi doesn't require any additional download
instalasi SED . Ini adalah file kumpulan hybrid yang digunakan Jscript
untuk mengimplementasikan fitur dan begitu juga swift
, dandoesn't suffer from the usual poison characters
pemrosesan batch dan menangani baris kosong dengan mudah.
Unduh repl
dari - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
Penulis adalah @dbenham dari stack overflow dan dostips.com
File batch pembantu lain yang disebut findrepl.bat
memberi pengguna Windows banyak kemampuan GREP
dan juga didasarkan padaJscript
dan juga file batch hybrid. Ini berbagi manfaat dari repl.bat
Unduh findrepl
dari - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
Penulis adalah @aacini dari stack overflow dan dostips.com
Sejauh yang saya tahu tidak ada sed yang dibundel dengan windows. Namun, sed tersedia untuk Windows dalam beberapa bentuk yang berbeda, termasuk sebagai bagian dari Cygwin, jika Anda ingin subsistem POSIX penuh, atau sebagai Win32 yang dapat dieksekusi asli jika Anda ingin menjalankan hanya sed pada baris perintah.
Sed untuk Windows (Proyek GnuWin32)
Jika perlu asli Windows maka satu-satunya hal yang saya sarankan adalah menggunakan bahasa scripting yang didukung oleh Windows tanpa add-on, seperti VBScript.
Saya membutuhkan alat sed yang bekerja untuk Windows cmd.exe prompt. Port Eric Pement dari sed ke .exe DOS tunggal bekerja sangat baik untuk saya.
Ini didokumentasikan dengan cukup baik .