2010-09-21 23 views
58
% cat temp 
$$$ hello1 
$$ hello2 
    hello3 
## hello4 
    hello5 $$$ 
% cat temp | grep "$$$" 
Illegal variable name. 
% cat temp | grep "\$\$\$" 
Variable name must contain alphanumeric characters. 
% 

voglio grep per $$$ e mi aspetto che il risultato sia

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

per differenziare, ho segnato il prompt come %.

  • Qual è il problema qui?
  • Cosa deve essere la stringa grep?
+2

Il secondo comando è corretto (con $ escape), ma è necessario utilizzare virgolette singole, non virgolette. –

risposta

77

Il problema è che la shell espande i nomi di variabili all'interno di stringhe tra virgolette. Quindi per "$$$" prova a leggere un nome di variabile che inizia con il primo $.

Nelle virgolette singole, invece, le variabili non vengono espanse. Pertanto, '$$$'sarebbe funzionare - se non fosse per il fatto che $ è un carattere speciale nelle espressioni regolari che indica la fine della riga. Quindi ha bisogno di essere sfuggito: '\$\$\$'.

0

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

+1

Perché il ^. * E il. * $? Sembrano completamente inutili ... –

20

Quando si utilizza virgolette " o nessuno usa doppia \: "\\\$\\\$\\\$"

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

se si usa tra virgolette singole ' è possibile utilizzare:

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

C'è un 'gatto' superfluo nel comando.

Problemi correlati