% 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 $$$
%
要区分,我已将提示标记为%
。
答案 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 \`"
非法的变量名。