0

我正在寻找其中带有撇号的行,并尝试了一些与我相同的表达方式;但是,有些有效,有些则无效。为什么我会出现以下行为:

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
4

2 回答 2

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

这实际上是\'在两个单引号字符串之间放置一个裸字引号()。然后这些都被隐式连接在一起。

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

于 2012-07-28T07:17:13.713 回答
0

我认为你过于复杂了,如果你试图匹配'引用它"

echo "'" | grep "'"
于 2012-07-28T12:40:53.517 回答