Lazer
Lazer

Reputation: 94870

How to grep for the dollar symbol ($)?

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

I want to grep for $$$ and I expect the result to be

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

To differentiate, I have marked the prompt as %.

Upvotes: 74

Views: 75860

Answers (5)

Gadolin
Gadolin

Reputation: 2686

When you use double quotes " or none use double\: "\\\$\\\$\\\$"

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

if you use in single quotes ' you may use:

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

Upvotes: 26

Konrad Rudolph
Konrad Rudolph

Reputation: 545686

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: '\$\$\$'.

Upvotes: 100

jowi
jowi

Reputation: 161

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

There's a superflous 'cat' in your command.

Upvotes: 8

tdammers
tdammers

Reputation: 20721

Works for me:

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

Upvotes: 5

F.P
F.P

Reputation: 17831

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

Upvotes: 1

Related Questions