Pergunta

Eu estou usando o grep para pesquisar um padrão através de um arquivo contido em um var

O código aqui:

result=`grep "$pattern" $file`
echo $result

Resultado:A) somewords B)somelines C)somenumbers

resultado da impressão em 1 linha.Eu gostaria de ter resultados um para a linha um

Como:

A) somewords
B) somelines
C) somenumbers

Como posso?

Obrigado

Foi útil?

Solução

Apenas citar o $result variável e as quebras de linha serão preservadas:

result=$(grep "$pattern" $file)
echo "$result"

A razão pela qual isso funciona é que quando você coloca algo em aspas duplas no bash, tudo dentro dessas citações é tratada como uma única palavra.Isso significa que ele não será sujeito a palavra de divisão.Veja também: http://mywiki.wooledge.org/WordSplitting

Efetivamente, quando você usa $result, ele é expandido para isso (porque as quebras de linha são tratados como delimitadores):

echo A) somewords B) somelines C) somenumbers

Quando você usa "$result" e evitar a palavra de divisão, torna-se expandido para isso:

echo "A) somewords
B) somelines
C) somenumbers"

Nota adicional:usando $(...) em vez de aspas para traz melhora a legibilidade e também é mais portátil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top