2013-08-09 12 views
25

Sto provando a utilizzare una variabile in un'espressione regolare di grep. Pubblicherò un esempio di errore e forse qualcuno può suggerire come fare in modo che la variabile venga valutata mentre si esegue il comando grep. Ho provato anche ${var}.variabile di shell in una regex di grep

$ string="test this" 
$ var="test" 
$ echo $string | grep '^$var' 
$ 

Dal momento che il mio regex dovrebbe corrispondere linee che iniziano con "test", si deve stampare la linea di eco attraverso di essa.

$ echo $string 
test this 
$ 
+3

Beh, credo di aver capito che funziona con doppi apici. –

+1

Corretto, doppi apici. Ricorda solo che tra virgolette devi scappare i backslash e il 'E' di EOL. – Kevin

+0

possibile duplicato di [comando grep per script bash Aggiungi] (http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

risposta

33

È necessario utilizzare le virgolette. Le virgolette singole impediscono che la variabile di shell venga interpolata dalla shell. Si utilizzano virgolette singole per evitare che la shell esegua l'interpolazione che potrebbe essere necessario eseguire se la propria espressione regolare utilizza $ come parte del modello. È inoltre possibile utilizzare una barra rovesciata per quote a $ se si utilizzano le virgolette doppie.

Inoltre, potrebbe essere necessario inserire la variabile tra parentesi graffe ${var} al fine di aiutare la separano dal resto del modello.

Esempio:

$ string="test this" 
$ var="test" 
$ echo $string | grep "^$var" 
+0

Dove sono le parentesi graffe nel codice di esempio? – moejoe

Problemi correlati