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

Regex 为什么这些正则表达式不同?,regex,grep,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 单引号和双引号在

我正在寻找其中有撇号的行,并尝试了一些似乎与我相同的表达方式;然而,有些成功了,有些没有。为什么我会有以下行为:

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

单引号和双引号在转义方面有所不同。将
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
这实际上是在两个单引号字符串之间插入一个裸引号(
\'
)。然后所有这些都隐式连接在一起


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

单引号和双引号在转义方面有差异。将
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
这实际上是在两个单引号字符串之间插入一个裸引号(
\'
)。然后所有这些都隐式连接在一起


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

如果您试图匹配
请在
中引用它,我认为这太复杂了:


如果你想匹配
请在
中引用它,我认为你太复杂了:


你的措辞有点误导人:用[…]引号转义听起来像是用引号转义。很好的建议是:使用
echo
来整理发生了什么事情,如何在单引号中转义字符?您的措辞有点误导性:使用[…]引号转义听起来像是使用引号转义。好的建议是:使用
echo
来整理发生了什么事情,如何在单个引号中转义字符?