ฉันต้องการแก้ไขเนื้อหาไฟล์โดยใช้โปรแกรมโดยใช้บรรทัดคำสั่ง windows ( cmd.exe ) ใน * ระวังมีsedสำหรับงานนี้ มีประโยชน์เทียบเท่าพื้นเมืองใน windows?
ฉันต้องการแก้ไขเนื้อหาไฟล์โดยใช้โปรแกรมโดยใช้บรรทัดคำสั่ง windows ( cmd.exe ) ใน * ระวังมีsedสำหรับงานนี้ มีประโยชน์เทียบเท่าพื้นเมืองใน windows?
คำตอบ:
วันนี้ PowerShell ช่วยฉัน
เพราะgrep
มี:
get-content somefile.txt | where { $_ -match "expression"}
หรือ
select-string somefile.txt -pattern "expression"
และsed
มี:
get-content somefile.txt | %{$_ -replace "expression","replace"}
สำหรับรายละเอียดเพิ่มเติมดูรายการบล็อก Zain Naboulsis
sed
(และ ilk ของมัน) มีอยู่ในแพคเกจต่าง ๆ ของคำสั่ง Unix
sed
, grep
ฯลฯ ออกจากกล่องแม้ว่า-z
ตัวเลือกต่างจากพอร์ตบนหากคุณไม่ต้องการติดตั้งอะไรและระบบของคุณไม่ใช่ Windows Server คุณสามารถใช้ภาษาสคริปต์ (VBScript เช่น) สำหรับสิ่งนั้น ด้านล่างนี้เป็นขั้นต้นแทงออกนอกข้อมือที่มัน บรรทัดคำสั่งของคุณจะเป็นอย่างไร
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
ที่ oldpat และ newpat มีMicrosoft VBScript รูปแบบ เห็นได้ชัดว่าฉันใช้คำสั่งทดแทนและคาดเดาบางสิ่งเท่านั้น แต่คุณสามารถทำให้มันฉลาดขึ้นและเข้าใจsed
บรรทัดคำสั่งมากขึ้น
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ให้ sed สำหรับ Win32 เช่นเดียวกับGnuWin32
หากคุณไม่ต้องการติดตั้งอะไร (ฉันคิดว่าคุณต้องการเพิ่มสคริปต์ลงในโซลูชัน / โปรแกรม / ฯลฯ ที่จะทำงานในเครื่องอื่น ๆ ) คุณสามารถลองสร้างสคริปต์ vbs (สมมติว่า 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
และคุณเรียกใช้เช่นนี้:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
ซึ่งคล้ายกับเวอร์ชั่น sed ที่จัดทำโดย "bill weaver" แต่ฉันคิดว่าอันนี้เป็นมิตรมากกว่าในแง่ของอักขระพิเศษ ('> </)
Btw ฉันไม่ได้เขียนสิ่งนี้ แต่ฉันจำไม่ได้ว่ามาจากไหน
นอกจากนี้ซูเปอร์ Sedรุ่นที่ปรับปรุงจาก sed สำหรับ Windows นี่เป็น. exe แบบสแตนด์อโลนมีไว้สำหรับการเรียกใช้จากบรรทัดคำสั่ง
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
นี่คือพฤติกรรมของ
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
คุณสามารถลองใช้ PowerShell มีคำสั่งget-contentและset-contentที่คุณสามารถใช้ได้
sed
;-) -replace
ประกอบการน่าจะเป็นข้อเสนอแนะที่ดีกว่า
ลอง fart.exe มันเป็นยูทิลิตี้ค้นหาและแทนที่ข้อความที่สามารถใช้ในโปรแกรมชุดคำสั่ง
คุณสามารถติดตั้ง Cygwin ( http://www.cygwin.com/ ) และใช้ sed จากที่นั่น
ผมใช้Cygwin ฉันพบเจอคนจำนวนมากที่ไม่ทราบว่าถ้าคุณวาง Cygwin ไบนารีไว้ใน PATH ของคุณคุณสามารถใช้พวกมันจากภายในเชลล์คำสั่งของ Windows คุณไม่จำเป็นต้องเรียกใช้ Bash ของ Cygwin
คุณอาจมองหาบริการ Windows สำหรับ Unixจาก Microsoft (เฉพาะในรุ่น Professional และ Windows รุ่นที่สูงกว่า)
edlin หรือแก้ไข
รวมถึงมีบริการ Windows สำหรับ Unix ซึ่งมาพร้อมกับเครื่องมือ unix มากมายสำหรับ windows http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
อัปเดต 12/7/12 ใน Windows 2003 R2, Windows 7 & Server 2008 ฯลฯ ข้างต้นจะถูกแทนที่ด้วยระบบย่อยสำหรับแอปพลิเคชันที่ใช้ UNIX (SUA) เป็นส่วนเสริม แต่คุณต้องดาวน์โหลดโปรแกรมอรรถประโยชน์: http://www.microsoft.com/en-us/download/details.aspx?id=2391
คุณสามารถดูเครื่องมือของ GNU ที่ให้บริการ (เหนือสิ่งอื่นใด) บนหน้าต่าง
มีไฟล์ชุดผู้ช่วยสำหรับ Windows ที่เรียกว่าrepl.bat
ซึ่งมีความสามารถในการ SED มากdoesn't require any additional download
หรือการติดตั้ง มันเป็นไฟล์แบตช์ไฮบริดที่ใช้Jscript
ในการใช้คุณสมบัติและอื่น ๆswift
และdoesn't suffer from the usual poison characters
การประมวลผลแบทช์และจัดการกับบรรทัดว่างได้อย่างง่ายดาย
ดาวน์โหลดrepl
จาก - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
ผู้เขียนคือ @dbenham จาก stack overflow และ dostips.com
ไฟล์แบตช์ตัวช่วยอื่นที่เรียกว่าfindrepl.bat
ช่วยให้ผู้ใช้ Windows มีความสามารถมากGREP
และเป็นไปตามJscript
และเป็นเช่นเดียวกันกับไฟล์แบตช์ไฮบริด มันแบ่งปันผลประโยชน์ของ repl.bat
ดาวน์โหลดfindrepl
จาก - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
ผู้เขียนคือ @aacini จาก stack overflow และ dostips.com
เท่าที่ฉันรู้ว่าไม่มีอะไรเหมือน sed มาพร้อมกับหน้าต่าง อย่างไรก็ตาม sed สามารถใช้งานได้กับ Windows ในหลายรูปแบบรวมถึงเป็นส่วนหนึ่งของ Cygwin หากคุณต้องการระบบย่อย POSIX เต็มรูปแบบหรือเป็น Win32 ดั้งเดิมที่สามารถเรียกใช้งานได้หากคุณต้องการเรียกใช้เพียงบรรทัดคำสั่ง
Sed สำหรับ Windows (โครงการ GnuWin32)
ถ้ามันจำเป็นต้องเป็น Native ของ Windows สิ่งอื่น ๆ ที่ฉันสามารถแนะนำได้ก็คือการใช้ภาษาสคริปต์ที่ Windows รองรับโดยไม่มีโปรแกรมเสริมเช่น VBScript
Cygwin ใช้งานได้ แต่ยูทิลิตี้เหล่านี้ยังมีอยู่ เพียงแค่เสียบเข้ากับไดรฟ์วางไดเรกตอรีเข้าไปในเส้นทางของคุณและคุณมียูทิลิตี้ยูนิกซ์ที่เป็นมิตร ไฟแช็ก IMHO นั้น Cygwin (แม้ว่ามันจะใช้ได้ดีเหมือนกัน)
ฉันต้องการเครื่องมือ sed ที่ใช้งานได้กับพรอมต์ Windows cmd.exe พอร์ตsedของ Eric Pement ไปยัง DOS .exe เดียวทำงานที่ดีสำหรับฉัน