web-dev-qa-db-ja.com

ドル記号($)を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 stringはどうあるべきですか?
66
Lazer

問題は、シェルが二重引用符で囲まれた文字列内の変数名を展開することです。したがって、"$$$"の場合、最初の$で始まる変数名を読み取ろうとします。

一方、単一引用符では、変数は展開されません。したがって、'$$$'would work – $が正規表現の行末を示す特殊文字であるという事実がなかった場合。したがって、エスケープする必要があります:'\$\$\$'

88
Konrad Rudolph

二重引用符を使用する場合"または使用しない場合はdouble\: "\\\$\\\$\\\$"を使用します

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

一重引用符で使用する場合は、次を使用できます。

cat t | grep '\$\$\$'
22
Gadolin
$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$

あなたのコマンドには、スーパーキャットの「猫」がいます。

8
jowi

私のために働く:

user@Host:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
user@Host:~$ 
5
tdammers

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

0
Florian Peschka

このコマンドと同じ問題

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

無効な変数名。

0
haykp