grep 如何解释 \$?

grep 如何解释 \$?

当我写作时

$ grep \$  

那么无论我在终端上输入什么,都会被匹配并打印在终端上。如何\$解释?

答案1

正在解释并将其作为行尾字符\$传递给 grep 。因此,假设您的行有一个结尾,它将匹配 :-)$

如果要$在 grep 中匹配实际值,请使用以下之一:

grep \\\$
grep '\$'

在前者中,shell 将 解释\\\并将解释为,\$从而得到。在后者中,它根本不解释它。$\$


至于你为什么\$匹配美元符号而不是两个字符序列的问题,像在中使用的正则表达式grep出于某些目的使用特殊字符。其中一些是:

$       end of line
^       start of line
.       any character
+       1 or more of the preceeding pattern
*       0 or more of the preceeding pattern
{n,m}   between n and m of the preceeding pattern
[x-y]   any character between x and y (such as [0-9] for a digit).

以及其他许多人。

当您想要匹配通常被视为特殊字符的文字字符时,您需要对其进行转义,以便grep将其视为普通字符。

答案2

在将参数传递给程序之前,shell 首先会扩展所有转义序列,因此它将 解释\$为转义序列,并将单个参数传递给$grep该参数与行尾匹配。由于每行都有结尾,因此任何行都应该匹配 :)

答案3

它被解释为行尾元字符。如果你想匹配一个实际的美元符号,请执行

 $ grep \\$ 

或者

 $ grep '\$' 

答案4

如果要搜索文字$,可以使用字符类的正则表达式来省去转义的麻烦。例如,

$ grep '[$]' file

相关内容