\反斜杠字符和 .在 grep 中

\反斜杠字符和 .在 grep 中

我对 grep 中的反斜杠字符 \ 和单引号感到困惑。根据我的理解,它保留了字面意思。例如

如果我这样做echo 'This is \.,它会给我This is \.

但是,如果我想匹配任何实际的 .(句点),我需要使用 '\.'逃避 的特殊含义。在正则表达式中。例如,如果有一个文件 demo.txt 取自来自该网站的示例

问题输出

我的问题是,在这种情况下,“ ”如何不保留 grep 的字面值?事实证明这对我来说非常令人困惑。任何解释都会非常有帮助。

答案1

单引号保护字符不被解释,但grep仍将参数视为正则表达式。

-F您可以通过使用或选项运行 grep 来关闭此行为--fixed-strings

grep -F 'purchase.' demo.txt

单引号不是必需的,因为这些、 、 、 、 、 、 或p字符u对于rshellc来说h都不as特殊的:e.

grep -F purchase. demo.txt

或者您可以使用grepwithout-F但使用 转义.正则表达式运算符\

grep 'purchase\.' demo.txt

单引号\(这对于 shell 来说也是特殊的;那里有一个引用运算符)按字面传递给grep.或者您可以使用\shell 引用运算符来引用自身:

grep purchase\\. demo.txt

您还可以使用[set]正则表达式运算符来匹配文字.

grep 'purchase[.]' demo.txt

再说一次,[set]shell 运算符(那里是一个通配运算符)因此也需要加引号(这里再次使用单引号)。

相关内容