正则表达式[^]]无法匹配双引号

时间:2012-06-18 09:38:50

标签: regex gnu grep

我在Windows 7命令提示符下使用GNU grep。

我有一个 jsutfstr.txt 文件,其内容如下:

some lines
HELLO("abc",adf)
HELLO("def", sd)
some lines
some lines
some lines

我想要点击 HELLO (..)模式。在Windows命令提示符中,我使用了这些:

C:\bin>Egrep     HELLO\(\"[^)]+\) jsutfstr.txt
HELLO("abc",adf)
HELLO("def", sd)

C:\bin>Egrep     HELLO\([^)]+\) jsutfstr.txt

所以,第二种模式没有产生任何结果。我不明白为什么我必须明确指定\。是不是[^]]匹配的所有内容都不等于,包括双引号?

1 个答案:

答案 0 :(得分:3)

问题是您首先运行解析该行的shell,而^cmd的转义字符。因此,在第二种情况下传递给grep的行是

Egrep     HELLO\([)]+\) jsutfstr.txt

虽然在第一种情况下"启动了一个引用的参数,cmd将无法查看。

你可以引用完整的参数来避免这种情况:

Egrep "HELLO\([^)]+\)" jsutfstr.txt