2010-02-04 59 views
2

我一直在使用grepWin进行文件搜索,而wingrep当我想要做替换或者什么都可以。grep替换与广泛的正则表达式实现

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

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

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

在此先感谢。

+0

这不是真的编程相关...这对超级用户来说可能是最好的。 – 2010-02-04 23:27:57

+0

我发现它与编程有关,因为它是一种我觉得作为程序员和编程目的无价的工具。 – Russell 2010-02-04 23:29:15

+0

感谢您的帮助,我已经完成了替换。 :)我结束了使用grep的组合作为Windows的GNU工具的一部分。再次感谢:) – Russell 2010-02-05 01:01:08

回答

2

我对这类任务使用Cygwin颇多。

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

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

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

+0

这是一个好主意。以前我遇到过不愉快的经历,但是这绝对值得一试。谢谢:) – Russell 2010-02-04 23:34:52

3

我觉得perl在命令行是你正在寻找的答案。广泛的便携式,强大的正则表达式支持。

假设您有以下文件:

foo 
bar 
baz 
quux 

可以使用

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

生产

foo 
bar 
baz 
splat! 

神奇的是在Perl的命令行开关:

  • -e:执行下一个参数作为perl命令。
  • -n:在每一行执行命令
  • -p:打印命令的结果,没有发出明确的 “打印”语句。
  • -i:进行替换。使用 输出的命令覆盖文档...谨慎使用。
1

如果你在Windows上,你可以使用vbscript(不需要下载)。它带有正则表达式。例如,改变 “一” 到 “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,以了解更多关于使用正则表达式

+0

非常感谢,VB Script也为我过去几次派上用场。我曾经用它弹出一个输入框,用于参数在nant脚本中。 – Russell 2010-02-05 00:54:37