基于这个问题关于SO,我发现:
echo "a']" | grep -E "\a"
匹配正常。
echo "a']" | grep -E "\]"
匹配正常。
但:
echo "a']" | grep -E "\'"
不匹配。我找不到任何文档来描述如何准确grep -E
处理转义单引号。我在 Ubuntu 14.04 上使用 GNU grep 2.16。
注意:
echo "a']" | grep -E "'"
匹配正常,但我很好奇如何grep -E
解释\'
.
更新:
我刚刚在 Cygwin 2.6.1 和 grep 2.27 上尝试过这个,我可以重现。使用grep --colour -Eo
也许会给出更清晰的 OK/Fail 结果?
答案1
它不仅仅是 GNU grep,还有 GNU sed 和 GNU awk: echo "a']" | sed "s/\'/foo/"
->a']foo
和echo "a']" | awk "{sub(/\'/,\"foo\")}1"
-> a']foo
。当您在 POSIX 模式下运行 awk 时,它不会执行此操作,而是会表现出预期的行为:echo "a']" | awk --posix "{sub(/\'/,\"foo\")}1"
->
afoo]
。
问题是有一个 GNU 主义,其\'
含义与 相同$
,请参阅http://www.regular-expressions.info/gnu.html:
Additional GNU Extensions
....
The anchor \` (backtick) matches at the very start of the subject string,
while \' (single quote) matches at the very end.
\'
如果有人有与我不同的用例,$
我很想听听。