如何grep美元符号($)?

时间:2010-09-21 11:42:24

标签: linux unix 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 $$$
%

要区分,我已将提示标记为%

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

6 个答案:

答案 0 :(得分:88)

问题是shell扩展了双引号字符串中的变量名。因此,对于"$$$",它会尝试从第一个$开始读取变量名称。

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

答案 1 :(得分:22)

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

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

如果您使用单引号',您可以使用:

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

答案 2 :(得分:7)

$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$

你的命令中有一个多余的'猫'。

答案 3 :(得分:5)

适合我:

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

答案 4 :(得分:0)

^.*[$]{3}.*$

怎么样?

答案 5 :(得分:0)

与此命令相同的问题

complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile \`"

非法的变量名。