我对 grep 中的反斜杠字符 \ 和单引号感到困惑。根据我的理解,它保留了字面意思。例如
如果我这样做echo 'This is \.
,它会给我This is \.
但是,如果我想匹配任何实际的 .(句点),我需要使用 '\.'逃避 的特殊含义。在正则表达式中。例如,如果有一个文件 demo.txt 取自来自该网站的示例
我的问题是,在这种情况下,“ ”如何不保留 grep 的字面值?事实证明这对我来说非常令人困惑。任何解释都会非常有帮助。
答案1
单引号保护字符不被解释壳,但grep
仍将参数视为正则表达式。
-F
您可以通过使用或选项运行 grep 来关闭此行为--fixed-strings
:
grep -F 'purchase.' demo.txt
单引号不是必需的,因为这些、 、 、 、 、 、 或p
字符u
对于r
shellc
来说h
都不a
是s
特殊的:e
.
grep -F purchase. demo.txt
或者您可以使用grep
without-F
但使用 转义.
正则表达式运算符\
:
grep 'purchase\.' demo.txt
单引号\
(这对于 shell 来说也是特殊的;那里有一个引用运算符)按字面传递给grep
.或者您可以使用\
shell 引用运算符来引用自身:
grep purchase\\. demo.txt
您还可以使用[set]
正则表达式运算符来匹配文字.
:
grep 'purchase[.]' demo.txt
再说一次,[set]
是还shell 运算符(那里是一个通配运算符)因此也需要加引号(这里再次使用单引号)。