1

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

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

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

我想grep HELLO (..) 模式。在 windows 命令提示符中,我使用了这些:

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

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

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

4

1 回答 1

3

问题是您首先运行到 shell 解析该行并且^cmd. grep所以在第二种情况下传递给的行是

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

而在第一种情况下,将"开始一个引用的参数,其中cmd不会查看。

您可以引用完整的论点来避免这种情况:

Egrep "HELLO\([^)]+\)" jsutfstr.txt
于 2012-06-18T09:41:32.227 回答