Tôi muốn lập trình chỉnh sửa nội dung tệp bằng dòng lệnh windows ( cmd.exe ). Trong * nix có sed cho nhiệm vụ này. Có bất kỳ tương đương bản địa hữu ích trong các cửa sổ?
Tôi muốn lập trình chỉnh sửa nội dung tệp bằng dòng lệnh windows ( cmd.exe ). Trong * nix có sed cho nhiệm vụ này. Có bất kỳ tương đương bản địa hữu ích trong các cửa sổ?
Câu trả lời:
Hôm nay powershell đã cứu tôi.
Vì grep
có:
get-content somefile.txt | where { $_ -match "expression"}
hoặc là
select-string somefile.txt -pattern "expression"
và vì sed
có:
get-content somefile.txt | %{$_ -replace "expression","replace"}
Để biết thêm chi tiết, xem mục blog của Zain Naboulsis .
sed
(và ilk của nó) được chứa trong một số gói lệnh Unix.
sed
, grep
vv ra khỏi hộp, mặc dù.-z
tùy chọn hỗ trợ không giống như các cổng trên được liệt kêNếu bạn không muốn cài đặt bất cứ thứ gì và hệ thống của bạn không phải là Windows Server, thì bạn có thể sử dụng ngôn ngữ kịch bản (ví dụ VBScript) cho điều đó. Dưới đây là một cú đâm thô thiển vào nó. Dòng lệnh của bạn sẽ giống như
cscript //NoLogo sed.vbs s/(oldpat)/(newpat)/ < inpfile.txt > outfile.txt
trong đó oldpat và newpat là các mẫu biểu thức vbscript của Microsoft . Rõ ràng là tôi chỉ thực hiện lệnh thay thế và giả định một số điều, nhưng bạn có thể xác định nó để thông minh hơn và hiểu nhiều hơn về dòng sed
lệnh.
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
Nếu bạn không muốn cài đặt bất cứ thứ gì (tôi giả sử bạn muốn thêm tập lệnh vào một số giải pháp / chương trình / vv sẽ được chạy trong các máy khác), bạn có thể thử tạo tập lệnh vbs (giả sử, thay thế.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
Và bạn chạy nó như thế này:
cscript replace.vbs "C:\One.txt" "Robert" "Rob"
Tương tự như phiên bản sed được cung cấp bởi "thợ dệt hóa đơn", nhưng tôi nghĩ phiên bản này thân thiện hơn về các ký tự đặc biệt ('> </).
Btw, tôi đã không viết nó, nhưng tôi không thể nhớ tôi đã lấy nó từ đâu.
> (Get-content file.txt) | Foreach-Object {$_ -replace "^SourceRegexp$", "DestinationString"} | Set-Content file.txt
Đây là hành vi của
sed -i 's/^SourceRegexp$/DestinationString/g' file.txt
Bạn có thể thử powershell. Có các lệnh lệnh get-content và set-content mà bạn có thể sử dụng.
sed
;-). Các -replace
nhà điều hành có lẽ là một gợi ý tốt hơn.
Hãy thử fart.exe. Đây là một tiện ích văn bản Tìm và thay thế có thể được sử dụng trong các chương trình bó lệnh.
Bạn có thể cài đặt Cygwin ( http://www.cygwin.com/ ) và sử dụng sed từ đó.
Tôi sử dụng Cygwin . Tôi gặp rất nhiều người không nhận ra rằng nếu bạn đặt các nhị phân Cygwin trên PATH của mình, bạn có thể sử dụng chúng từ trong vỏ Windows Command. Bạn không phải chạy Bash của Cygwin.
Bạn cũng có thể xem xét Dịch vụ Windows cho Unix có sẵn từ Microsoft (nhưng chỉ trên các phiên bản Windows chuyên nghiệp và cao hơn).
edlin hoặc chỉnh sửa
Ngoài ra, còn có Windows Services cho Unix đi kèm với nhiều công cụ unix cho windows. http://technet.microsoft.com/en-us/interopmigration/bb380242.aspx
Cập nhật 12/7/12 Trong Windows 2003 R2, Windows 7 & Server 2008, v.v., phần trên được thay thế bởi Hệ thống con cho các ứng dụng dựa trên UNIX (SUA) dưới dạng một tiện ích bổ sung. Nhưng bạn phải tải xuống các tiện ích: http://www.microsoft.com/en-us/doad/details.aspx?id=2391
Có một tệp bó trợ giúp cho Windows được gọi là repl.bat
có nhiều khả năng của SED nhưng doesn't require any additional download
hoặc cài đặt. Đây là một tệp bó kết hợp sử dụng Jscript
để thực hiện các tính năng và cũng vậy swift
, vàdoesn't suffer from the usual poison characters
chế biến hàng loạt và xử lý dòng trống một cách dễ dàng.
Tải xuống repl
từ - https://www.dropbox.com/s/qidqwztmetbvklt/repl.bat
Tác giả là @dbenham từ stack overflow và dostips.com
Một tệp bó trợ giúp khác được gọi là findrepl.bat
cung cấp cho người dùng Windows phần lớn khả năng GREP
và cũng dựa trênJscript
và tương tự như vậy là một tệp bó lai. Nó chia sẻ những lợi ích của repl.bat
Tải xuống findrepl
từ - https://www.dropbox.com/s/rfdldmcb6vwi9xc/findrepl.bat
Tác giả là @aacini từ stack stack và dostips.com
Theo tôi biết không có gì giống như sed được đóng gói với các cửa sổ. Tuy nhiên, sed có sẵn cho Windows ở một số dạng khác nhau, bao gồm cả một phần của Cygwin, nếu bạn muốn có một hệ thống con POSIX đầy đủ hoặc dưới dạng thực thi riêng của Win32 nếu bạn chỉ muốn chạy sed trên dòng lệnh.
Sed cho Windows (Dự án GnuWin32)
Nếu nó cần phải có nguồn gốc từ Windows thì điều khác duy nhất tôi có thể đề xuất là sử dụng ngôn ngữ kịch bản được Windows hỗ trợ mà không cần tiện ích bổ sung, chẳng hạn như VBScript.
Tôi cần một công cụ sed hoạt động cho dấu nhắc cmd.exe của Windows. Cổng sed của Eric Pement cho một DOS .exe hoạt động rất tốt đối với tôi.
Đó là tài liệu khá tốt .