grep替换广泛的正则表达式实现

时间:2010-02-04 23:27:12

标签: regex grep

我一直在使用grepWin进行文件的一般搜索,而当我想要替换或者你有什么时候使用wingrep。

GrepWin有广泛的正则表达式实现,但不做替换(如上所述)。

Wingrep会替换,但是正则表达式的实现范围非常有限。

有没有人知道任何(最好是免费的)grep工具用于替换Windows并且具有正则表达式的合理实现?

提前致谢。

3 个答案:

答案 0 :(得分:3)

我认为命令行中的perl是您正在寻找的答案。广泛的便携式,强大的正则表达式支持。

假设您有以下文件:

foo
bar
baz
quux

你可以使用

perl -pne 's/quux/splat!/' -i /tmp/foo

生产

foo
bar
baz
splat!

神奇之处在于Perl的命令行开关:

  • -e:以perl命令执行下一个参数。
  • -n:在每一行执行命令
  • -p:打印命令的结果,而不发出明确的    'print'声明。
  • -i:进行替换。用。覆盖文档    输出你的命令......谨慎使用。

答案 1 :(得分:2)

我为这类任务使用了很多Cygwin。

不幸的是,它有世界上最不直观的安装程序,但一旦安装正确,它就非常实用......除了复制和粘贴的一些小问题以及行结尾的奇怪问题。

好处是所有工具都像真正的GNU系统一样工作,所以如果你已经熟悉Linux或类似的东西,你就不必学习任何新东西(除了如何使用那个疯狂的安装程序)

总的来说,我认为这些优势弥补了一些可用性问题。

答案 2 :(得分:1)

如果您使用的是Windows,则可以使用vbscript(无需下载)。它带有正则表达式。例如,将“one”改为“ONE”

Set objFS=CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objArgs = WScript.Arguments
strFile = objArgs(0)
Set objFile = objFS.OpenTextFile(strFile)
strFileContents = objFile.ReadAll
Set objRE = New RegExp
objRE.Global     = True
objRE.IgnoreCase = False
objRE.Pattern = "one"
strFileContents = objRE.Replace(strFileContents,"ONE") 'simple replacement
WScript.Echo strFileContents

输出

C:\test>type file
one
two one two
three

C:\test>cscript //nologo test.vbs file
ONE
two ONE two
three

您可以阅读vbscript doc以了解有关使用正则表达式的更多信息