Как 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?

Ответ 1

Проблема заключается в том, что оболочка расширяет имена переменных внутри строк с двойными кавычками. Поэтому для "$$$" он пытается прочитать имя переменной, начиная с первого $.

В одиночных кавычках, с другой стороны, переменные не расширяются. Следовательно, '$$$' будет работать - если бы не тот факт, что $ является специальным символом в регулярных выражениях, обозначающих конец строки. Поэтому его нужно экранировать: '\$\$\$'.

Ответ 2

Когда вы используете двойные кавычки " или ни один не использует double \: "\\\$\\\$\\\$"

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

если вы используете одиночные кавычки, вы можете использовать:

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

Ответ 3

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

В вашей команде есть сверхъестественный "кот".

Ответ 5

Как насчет ^.*[$]{3}.*$