我正在寻找其中有撇号的行,并尝试了一些看起来与我相同的表达;然而,有些人工作,有些人没有。为什么我会出现以下行为:
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
答案 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 "'"