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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top