带反引号的 grep 正则表达式匹配所有行
grep regex with backtick matches all lines
$ cat file
anna
amma
kklks
ksklaii
$ grep '\`' file
anna
amma
kklks
ksklaii
为什么?那场比赛如何运作?
这似乎是正则表达式的 GNU 扩展。反引号 ('\`') 锚点匹配主题字符串的开头,这解释了为什么它匹配所有行。 OS X 显然没有实现 GNU 扩展,这可以解释为什么您的示例不匹配那里的任何行。参见 http://www.regular-expressions.info/gnu.html
如果您想在 GNU 扩展生效时匹配实际的反引号,这对我有用:
grep '[`]' file
提供了关键指针,但请注意,它是 序列 \`
,而不是 `
本身 在 GNU 正则表达式.
中充当 输入起始锚点
因此,要匹配指定为 单引号 shell 字符串 的正则表达式中的文字反引号,您不需要任何转义完全,既不使用 GNU grep
也不使用 BSD/macOS grep
:
$ { echo 'ab'; echo 'c`d'; } | grep '`'
c`d
当使用 双引号 shell 字符串时 - 你应该 避免 用于正则表达式 ,原因将变得显而易见 - 事情变得更加复杂,因为您必须转义 `
用于 shell' s 为了将它作为文字传递给 grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\`"
c`d
请注意,在 shell 解析了 "..."
字符串后,grep
仍然只看到 `
.
使用 GNU 双引号 字符串重新创建原始命令 grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\\`" # !! BOTH \ and ` need \-escaping
ab
c`d
同样,在 shell 的字符串解析之后,grep
只看到 \`
,对于 GNU grep
来说是输入锚点的开始,因此所有输入行都匹配。
- 还请注意,由于
grep
逐行处理输入,因此 \`
与 ^
start-of-line锚;但是,对于多行输入 - 例如如果您使用 grep -z
一次读取所有行 - \`
仅匹配整个字符串的开头。
到BSD/macOSgrep
,\`
只是简单地转义了一个文字`
,所以它只匹配包含那个字符的输入行。
$ cat file
anna
amma
kklks
ksklaii
$ grep '\`' file
anna
amma
kklks
ksklaii
为什么?那场比赛如何运作?
这似乎是正则表达式的 GNU 扩展。反引号 ('\`') 锚点匹配主题字符串的开头,这解释了为什么它匹配所有行。 OS X 显然没有实现 GNU 扩展,这可以解释为什么您的示例不匹配那里的任何行。参见 http://www.regular-expressions.info/gnu.html
如果您想在 GNU 扩展生效时匹配实际的反引号,这对我有用:
grep '[`]' file
\`
,而不是 `
本身 在 GNU 正则表达式.
因此,要匹配指定为 单引号 shell 字符串 的正则表达式中的文字反引号,您不需要任何转义完全,既不使用 GNU grep
也不使用 BSD/macOS grep
:
$ { echo 'ab'; echo 'c`d'; } | grep '`'
c`d
当使用 双引号 shell 字符串时 - 你应该 避免 用于正则表达式 ,原因将变得显而易见 - 事情变得更加复杂,因为您必须转义 `
用于 shell' s 为了将它作为文字传递给 grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\`"
c`d
请注意,在 shell 解析了 "..."
字符串后,grep
仍然只看到 `
.
使用 GNU 双引号 字符串重新创建原始命令 grep
:
$ { echo 'ab'; echo 'c`d'; } | grep "\\`" # !! BOTH \ and ` need \-escaping
ab
c`d
同样,在 shell 的字符串解析之后,grep
只看到 \`
,对于 GNU grep
来说是输入锚点的开始,因此所有输入行都匹配。
- 还请注意,由于
grep
逐行处理输入,因此\`
与^
start-of-line锚;但是,对于多行输入 - 例如如果您使用grep -z
一次读取所有行 -\`
仅匹配整个字符串的开头。
到BSD/macOSgrep
,\`
只是简单地转义了一个文字`
,所以它只匹配包含那个字符的输入行。