如何使用 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,但确实支持这些命令行实用程序中似乎仅次于 PCRE 的功能。ERE(扩展正则表达式)。使用带有 -r 的 sed 可以避免使用多余的反斜杠。上次我检查时,没有 -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,以及如何使用它。

相关内容