为什么这些正则表达式不同?

时间:2012-07-28 07:11:42

标签: regex grep

我正在寻找其中有撇号的行,并尝试了一些看起来与我相同的表达;然而,有些人工作,有些人没有。为什么我会出现以下行为:

egrep \' file      # works as expected

egrep "\'" file    # seems to return all lines

egrep "[\']" file  # works as expected

egrep '\'' file    # seems to be waiting for more input

2 个答案:

答案 0 :(得分:5)

单引号和双引号在转义时有所不同。将echo放在前面以查看实际发送到egrep的内容:

$ echo egrep \' file
egrep ' file
$ echo egrep "\'" file
egrep \' file
$ echo egrep "[\']" file
egrep [\'] file
$ echo egrep '\'' file
>

最后一种情况是提示输入更多内容,因为你仍然在单引号中:它不是单引号中的转义引号(\')(因为这不是你如何转义单引号。 )这是单引号之间的反斜杠,带有开头引号。

顺便说一下,要在单引号字符串中转义单引号,请使用如下结构:

$ echo 'foo'\''bar'
foo'bar

这实际上是在两个单引号字符串之间放置一个裸露的文字引号(\')。然后将它们全部隐含地连接在一起。

我不知道为什么"\'"匹配所有行(但它确实似乎。)

答案 1 :(得分:0)

如果你想在'中引用"引用它,我认为你已经过度复杂了:

echo "'" | grep "'"