% cat temp
$$$ hello1
$$ hello2
hello3
## hello4
hello5 $$$
% cat temp | grep \"$$$\"
Illegal variable name.
% cat temp | grep \"\\$\\$\\$\"
Variable name
Same issue with this command
complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile \`"
Illegal variable name.
How about ^.*[$]{3}.*$
The problem is that the shell expands variable names inside double-quoted strings. So for "$$$"
it tries to read a variable name starting with the first $
.
In single quotes, on the other hand, variables are not expanded. Therefore, '$$$'
would work – if it were not for the fact that $
is a special character in regular expressions denoting the line ending. So it needs to be escaped: '\$\$\$'
.
Works for me:
user@host:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
user@host:~$
$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$
There's a superflous 'cat' in your command.
When you use double quotes "
or none use double\: "\\\$\\\$\\\$"
cat t | grep \\\$\\\$\\\$
if you use in single quotes ' you may use:
cat t | grep '\$\$\$'