如何grep的美元符号($)?

% cat temp $$$ hello1 $$ hello2 hello3 ## hello4 hello5 $$$ % cat temp | grep "$$$" Illegal variable name. % cat temp | grep "\$\$\$" Variable name must contain alphanumeric characters. % 

我希望grep为$$$ ,我期望的结果是

 % cat temp | grep <what should go here?> $$$ hello1 hello5 $$$ % 

为了区分,我将提示标记为%

  • 这里有什么问题?
  • grepstring应该是什么?

问题是shell在双引号string内展开variables名称。 所以对于"$$$"它试图从第一个$开始读取variables名。

另一方面,在单引号中,variables不会被扩展。 因此, '$$$' 起作用 – 如果它不是因为$是表示行结尾的正则expression式中的特殊字符。 所以它需要被转义: '\$\$\$'

当您使用双引号"或没有使用双\: "\\\$\\\$\\\$"

 cat t | grep \\\$\\\$\\\$ 

如果你使用单引号,你可以使用:

 cat t | grep '\$\$\$' 
 $ grep '\$\$\$' temp $$$ hello1 hello5 $$$ 

你的命令中有一个超级“猫”。

适用于我:

 user@host:~$ cat temp | grep '\$\$\$' $$$ hello1 hello5 $$$ user@host:~$ 

怎么样^.*[$]{3}.*$