Как 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 быть?
5 61

5 ответов:

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

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

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

cat t | grep \$\$\$ 

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

cat t | grep '$$$'
$ grep '$$$' temp
$$$ hello1
hello5 $$$

есть лишние 'кошка' в вашей команде.

У меня работает:

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

как о ^.*[$]{3}.*$