如何使用 Windows 命令列運行正規表示式查找和替換

如何使用 Windows 命令列運行正規表示式查找和替換

我想使用命令列執行複雜的查找和替換,就像使用 notepad++ 所做的那樣。我從網路上找到了很多解決方案,但沒有一個符合我的要求。

我有一個文件,我想在其中執行正則表達式查找和替換

另一個包含正規表示式字串的檔案(都會尋找並替換為。我可以用它來製作兩個單獨的檔案或任何東西。)

如果可以完成上述任務,也請指導如何在此文件中放置正規表示式查找和取代字串。

編輯

是否有適用於 Windows 的 PCRE 相容查找和替換實用程式?

答案1

有 Windows“findstr”命令,但它無法替代並且具有有限的正規表示式支援。除此之外,看看如何使用 *nix 來完成它,然後在 Windows 中使用這些工具。所以你可以在 Windows 上使用 grep 和 sed。

一些批次人員可能會使用一種工具(可能由批次專家 dave benham 編寫),該工具將 microsoft jscript 與批次合併,並具有搜尋和替換選項。我想如果您使用的是一個非常鎖定的系統並且甚至無法下載 EXE,那麼這是完美的。但否則下載或複製/貼上腳本幾乎就像獲取第三方的東西,然後已經有像 grep 和 sed 等廣泛使用的工具,並且可以下載用於 Windows。

*?是惰性求值,有點高級並且需要 -P (PCRE - perl 相容正規表示式)

C:\>echo abccccdd| grep -oP "a.*?c"
abc

C:\>

如果正規表示式不太高級,您可以根據需要刪除 -P。雖然我保留著它。

Sed 沒有 PCRE 那麼遠,但確實支援這些命令列實用程式的下一個最佳功能。 ERE(擴展正規表示式)。將 sed 與 -r 一起使用可以使您不必使用多餘的反斜線。上次我檢查時,沒有 -r 它使用 BRE(基本正則表達式)。

這意味著將正規表示式匹配替換為空

C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd

這個 /g 修飾符將進行全域搜尋和替換,因此不會只替換第一個匹配項

C:\>echo abacacda| sed "s/a//g"
bccd

您可以使用 gnuwin32 取得它,或者您可以從 cygwin 使用它,然後使用單引號,如果使用 cygwin,那麼最好從 cygwin 的 shell(例如 cygwin 的 bash shell)執行此操作。

這些命令顯然可以對檔案進行操作。

C:\>type a.a
asdf

C:\>


C:\>grep -o a a.a
a

C:\>sed "s/a/z/" a.a
zsdf

C:\>

或 Perl

grep 不會搜尋和取代。 Sed 會,儘管 sed 不支援 PCRE(至少我的 sed 不支援)。另一個選擇是 perl。 Perl 正規表示式與 PCRE 一樣好,甚至更好。看這裡https://stackoverflow.com/questions/4794145/perl-one-liner-like-grep並看到它提到了這個鏈接Perl 與終端機中的正規表示式相符?看看我的答案,它有 perl 形式的 grep 和 sed,顯然你會得到 perl 的強大正規表示式支持

如果您在第二個連結中查看我的答案(正如我所說),那麼您會看到我說我在 cygwin 中獲得並使用了 perl,以及如何使用它。

相關內容