Apakah ada utilitas seperti sed untuk cmd.exe? [Tutup]
149
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?
Apa yang Anda maksud dengan "asli" ??? Dapat diinstal untuk bekerja di cmd.exe, atau bekerja tanpa instalasi apa pun? Jika yang pertama, lihat GnuWin32 ref'd di bawah; jika yang terakhir, tidak. Tidak ada sed bawaan asli untuk windows.
Michael Paulukonis
6
Maksud saya solusi yang berjalan pada semua windows tanpa menginstal hal-hal tambahan.
Jakub Šturc
1
Tinggalkan cmd.exe di belakang dan gunakan PowerShell sebagai gantinya.
Selain itu: jika Anda ingin memanggilnya dari cmd normal, cukup @powershell -Command "get-content ...". Satu-satunya peringatan adalah bahwa Anda harus menghindari tanda kutip: ... -Command "get-content ... \" expression \ ", ..."
Tarc
1
@Tarc AFAIR, Anda dapat menggunakan tanda kutip tunggal dalam perintah Anda dan menggunakan tanda kutip ganda untuk mengutip perintah
2
Saya mencoba ini hari ini pada file untuk menghapus beberapa hal di antara tanda kutip di tempat-tempat tertentu, hanya untuk menemukan bahwa output adalah file hampir dua kali lebih besar dari aslinya. Alasannya tampaknya karena metode ini mengubah cara baris baru ditangani dalam file untuk menggunakan "\ r \ n" bukannya "\ n".
user132278
1
Menggandakan karena \ r \ n akan menyiratkan bahwa file Anda hanya terdiri dari baris baru. Inilah alasan sebenarnya: penyandian .
Windows Subsystem untuk Linux adalah opsi yang paling "asli", tetapi tidak diinstal pada Windows secara default; itu sed, grepdll. di luar kotak, meskipun.
Jika 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
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 sedperintah.
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
Ini bukan apa yang saya inginkan namun saya percaya bahwa ketergantungan pada VBS adalah solusi paling ringan.
Jakub Šturc
7
GnuWin32 adalah solusi asli, jika dengan asli yang Anda maksud dirancang untuk berjalan di lingkungan windows "normal" (tidak seperti CygWin). Cobalah, dan Anda akan mulai mengharapkan mereka berada di SETIAP sistem windows yang Anda gunakan. !!!
Michael Paulukonis
3
Bekerja untuk kasus saya! Juga, jangan lupa opsi cscript "// NoLogo".
Marko Dumic
4
Jika ini "tidak jelas", pikirkan seperti apa kode Anda yang lain! Luar biasa, terima kasih.
Sabuncu
2
Utilitas pencarian dan penggantian regex yang serupa dapat dilakukan dengan JScript. Keuntungan dari JScript dibandingkan VBScript adalah ia dapat dengan mudah dikombinasikan dengan batch dalam satu script, membuat utilitas lebih mudah digunakan dalam konteks batch atau baris perintah. Utilitas JScript / batch hybrid kuat yang disebut REPL.BAT tersedia . Ini memiliki banyak opsi baris perintah. Dokumentasi lengkap tertanam dalam skrip. Itu tentu tidak memiliki kemampuan sed penuh, tetapi meskipun begitu, itu cukup kuat.
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):
Ini bekerja dengan sempurna. Catatan: tanda kurung pada "get-content" memastikan bahwa file tidak akan digunakan nanti ketika "set-content" akan dipanggil.
Kafu
apakah mungkin ada yang serupa di cmd? di pahami ini hanya untuk pwsh
Ferroao
Apakah 'SourceRegexp' harus diganti oleh regex yang memungkinkan? apakah itu benar-benar berfungsi pada power shell?
scjorge
7
Anda bisa mencoba PowerShell. Ada commandlets get-content dan set-content yang bisa Anda gunakan.
Itu mungkin adalah dua hal di PowerShell yang berkontribusi paling sedikit pada apa yang seddilakukan ;-). The -replaceOperator mungkin saran yang lebih baik.
Joey
7
Coba fart.exe. Ini adalah utilitas Find-and-replace-text yang dapat digunakan dalam program kumpulan perintah.
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).
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.batyang memiliki banyak kemampuan tetapi doesn't require any additional downloadinstalasi SED . Ini adalah file kumpulan hybrid yang digunakan Jscriptuntuk mengimplementasikan fitur dan begitu juga swift, dandoesn't suffer from the usual poison characters pemrosesan batch dan menangani baris kosong dengan mudah.
Penulis adalah @dbenham dari stack overflow dan dostips.com
File batch pembantu lain yang disebut findrepl.batmemberi pengguna Windows banyak kemampuan GREPdan juga didasarkan padaJscript dan juga file batch hybrid. Ini berbagi manfaat dari repl.bat
Tautan dropbox untuk repl turun. Apakah Anda memiliki tautan sekunder?
Vishal Anand
2
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.
Jika perlu asli Windows maka satu-satunya hal yang saya sarankan adalah menggunakan bahasa scripting yang didukung oleh Windows tanpa add-on, seperti VBScript.
Cygwin bekerja, tapi ini utilitas juga tersedia. Cukup taruh di drive Anda, masukkan direktori ke jalur Anda, dan Anda memiliki banyak utilitas unix yang ramah. IMHO lebih ringan bahwa Cygwin (meskipun itu bekerja dengan baik).
Pertanyaannya adalah tentang Windows (cmd.exe) bukan tentang DOS
a_horse_with_no_name
@ Howhowie: Begitu. Meskipun beberapa jawaban ini mungkin berguna bagi seseorang, saya setuju bahwa pertanyaan itu sendiri tidak cocok untuk SO. OTOH, saya tidak merasa memenuhi syarat untuk merekomendasikan penghapusan grosir.
PM 2Ring
Dalam situasi ini saya pikir akan sulit untuk memasukkan bagian-bagian penting dari jawaban, karena bagian esensial adalah file .exe yang di-host di halaman tertaut. Saya benar-benar mengerti kekhawatiran tentang link-rot, saya hanya tidak yakin bagaimana saya bisa membuat ini mandiri ke SO.
bryan kennedy
Terima kasih atas tangkapannya, a_horse_with_no_name. Saya ceroboh dengan bahasa saya. Saya mengedit komentar saya untuk memperbaiki masalah yang Anda tunjukkan.
Jawaban:
Hari ini Powerhell menyelamatkan saya.
Karena
grep
ada:atau
dan untuk itu
sed
ada:Untuk detail lebih lanjut lihat entri blog Zain Naboulsis .
sumber
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
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.sumber
UnxUtils menyediakan sed untuk Win32, seperti halnya GNUWin32 .
sumber
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):
Dan Anda menjalankannya seperti ini:
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.
sumber
Ada Super Sed versi sed ditingkatkan. Untuk Windows, ini adalah .exe mandiri, yang dimaksudkan untuk berjalan dari baris perintah.
sumber
Ini adalah perilaku
sumber
Anda bisa mencoba PowerShell. Ada commandlets get-content dan set-content yang bisa Anda gunakan.
sumber
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.
http://sourceforge.net/projects/fart-it/
sumber
Anda dapat menginstal Cygwin ( http://www.cygwin.com/ ) dan menggunakan sed dari sana.
sumber
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).
sumber
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
sumber
Anda dapat melihat Alat GNU , mereka menyediakan (di antara hal lain) di windows.
sumber
Ada file batch pembantu untuk Windows yang disebut
repl.bat
yang memiliki banyak kemampuan tetapidoesn't require any additional download
instalasi SED . Ini adalah file kumpulan hybrid yang digunakanJscript
untuk mengimplementasikan fitur dan begitu jugaswift
, 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.batPenulis adalah @dbenham dari stack overflow dan dostips.com
File batch pembantu lain yang disebut
findrepl.bat
memberi pengguna Windows banyak kemampuanGREP
dan juga didasarkan padaJscript
dan juga file batch hybrid. Ini berbagi manfaat dari repl.batUnduh
findrepl
dari - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.batPenulis adalah @aacini dari stack overflow dan dostips.com
sumber
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.
sumber
Cygwin bekerja, tapi ini utilitas juga tersedia. Cukup taruh di drive Anda, masukkan direktori ke jalur Anda, dan Anda memiliki banyak utilitas unix yang ramah. IMHO lebih ringan bahwa Cygwin (meskipun itu bekerja dengan baik).
sumber
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 .
sumber