Как 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 $$$
В вашей команде есть сверхъестественный "кот".
Ответ 4
Работает для меня:
[email protected]:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
[email protected]:~$
Ответ 5
Как насчет ^.*[$]{3}.*$