Как получить символ доллара ($)? - PullRequest
66 голосов
/ 21 сентября 2010
% 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 строка ?

Ответы [ 6 ]

88 голосов
/ 21 сентября 2010

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

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

22 голосов
/ 21 сентября 2010

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

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

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

cat t | grep '\$\$\$'
7 голосов
/ 21 сентября 2010
$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$

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

5 голосов
/ 21 сентября 2010

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

user@host:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
user@host:~$ 
0 голосов
/ 14 ноября 2018

Та же проблема с этой командой

complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile \`"

Недопустимое имя переменной.

0 голосов
/ 21 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...