it-swarm.com.de

Wie kann man das Dollarsymbol ($) erhalten?

% cat temp
$$$ hello1
$$  hello2
    hello3
##  hello4
    hello5 $$$
% cat temp | grep "$$$"
Illegal variable name.
% cat temp | grep "\$\$\$"
Variable name must contain alphanumeric characters.
%

Ich möchte für $$$ grep und ich erwarte das Ergebnis

% cat temp | grep <what should go here?>
$$$ hello1
    hello5 $$$
%

Zur Unterscheidung habe ich die Aufforderung als % markiert.

  • Was ist das Problem hier?
  • Was soll der grep string sein?
63
Lazer

Das Problem ist, dass die Shell Variablennamen in doppelten Anführungszeichen erweitert. Für "$$$" wird also versucht, einen Variablennamen zu lesen, der mit dem ersten $ beginnt.

In einfachen Anführungszeichen hingegen werden Variablen nicht erweitert. Daher wäre '$$$' würde work -, wenn nicht $ ein Sonderzeichen in regulären Ausdrücken wäre, die das Zeilenende angeben. Es muss also ein Escapezeichen gegeben werden: '\$\$\$'.

86
Konrad Rudolph

Wenn Sie doppelte Anführungszeichen verwenden, " oder keine, verwenden Sie double\: "\\\$\\\$\\\$"

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

wenn Sie in einfachen Anführungszeichen verwenden, können Sie Folgendes verwenden:

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

Es gibt eine überflüssige "Katze" in Ihrem Befehl. 

7
jowi

Funktioniert bei mir:

[email protected]:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
[email protected]:~$ 
5
tdammers

Wie wäre es mit ^.*[$]{3}.*$

0
Florian Peschka

Gleiches Problem mit diesem Befehl

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

Ungültiger Variablenname.

0
haykp