Come modificare l'output del grep: ottenere ogni risultato in ogni riga
Domanda
Sto usando GREP per cercare un modello tramite un file contenuto in un var
Codice qui:
result=`grep "$pattern" $file`
echo $result
.
Risultato: A) In qualche ordine B) Somelines c) Somenumbri
Print risultato su 1 riga.Mi piacerebbe avere risultati uno per la linea A
Come:
A) somewords
B) somelines
C) somenumbers
.
Come posso?
Grazie
Soluzione
Basta citare la tua variabile $result
e le nuove linee saranno preservate:
result=$(grep "$pattern" $file)
echo "$result"
.
La ragione per cui funziona è che quando alleni qualcosa in virgolette doppie in bash, tutto all'interno di queste virgolette è considerata come una singola parola.Ciò significa che non sarà soggetto a Splitazione parola .Vedi anche: http://mywiki.wooldge.org/wordsplicting
Effettivamente quando si utilizza $result
, viene espanso a questo (perché le nuove linee sono trattate come delimitatori):
echo A) somewords B) somelines C) somenumbers
.
Quando si utilizza "$result"
ed eviti la spaccatura della parola, viene espansa a questo:
echo "A) somewords
B) somelines
C) somenumbers"
.
Nota aggiuntiva: l'utilizzo di $(...)
anziché i backticks migliora la leggibilità e anche è più portatile.