使用grep匹配字符串时,对于带引号("与')的匹配出现了问题。想当然的认为把引号用反斜线()转义就可以了,但是实际是不行的。

grep的帮助给的例子是grep -i 'hello world' menu.h main.c 也就是说,标准的用法需要将正则表达式用单引号引起来,当然双引号也是可以的。但是,如果要匹配含引号的字符串,如果用反斜线转义,比如想用  grep  '^'this' 来匹配以  'this  开头的行是不行的,grep会认为 '^'  是一个字符串,而后边的 ' 缺少一个与其配对,所以命令行会提示你继续输入。双引号也是这样的。

如果要匹配单引号,可以把表达式用双引号引起来,此时引号只做普通字符,不需要转义。

如:可以用 "^'this" 来匹配以  'this 开头的字符串,匹配双引号的时候表达式就用单引号。

另外,grep 后面的RE其实可以不用引号引起来,直接写就可以。但是可能是不标准,但是比较方便。这样,就没有引号的问题了。但这样如果RE中出现引号,就要用转义了。

例如:可以用 ^"this 匹配以 "this  开头的字符串。 另外网上还提到了用  42  uxxx 等方法匹配引号,但是可能只适合不同的编程语言,在grep工具中不能用。

其实grep的manpage里面提到的需要转义的字符,并不包括引号。

In basic regular expressions the meta-characters ?, +, {, |, (, and )
lose their special meaning; instead use the backslashed versions ?,
+, {, |, (, and ).