2011-03-22 20 views
13

que desea asignar resultado grep para una variable para su uso posterior:¿Cómo conservar el resultado de grep con nueva línea?

lines=`cat abc.txt | grep "hello"` 

pero lo que he encontrado es $ líneas no contiene carácter de nueva línea más. Entonces cuando lo hago

echo $lines 

solo se imprime una línea. ¿Cómo puedo conservar el carácter de nueva línea, así que cuando echo $ lines, es lo mismo que cat abc.txt | grep "hola".

+5

abuso felina: 'líneas = $ (grep hola abc.txt)' . –

+0

Véase también http://stackoverflow.com/questions/613572/capturing-multiple-line-output-to-a-bash-variable/ –

Respuesta

32

que quiere decir

echo "$lines" 

en lugar de

echo $lines 

Elaborar:

echo $lines significa "formar un nuevo comando reemplazando $lines con el contenido de la variable denominada lines, dividiéndolo en espacios en blanco para formar cero o más argumentos nuevos para el comando echo. Para examen PLE:

lines='1 2 3' 
echo $lines # equivalent to "echo 1 2 3" 
lines='1 2 3' 
echo $lines # also equivalent to "echo 1 2 3" 
lines="1 
2 
3" 
echo $lines # also equivalent to "echo 1 2 3" 

Todos estos ejemplos son equivalentes, ya que la cáscara ignora el tipo específico de espacios en blanco entre las palabras individuales almacenados en la variable lines. En realidad, para ser más precisos, el shell divide el contenido de la variable en los caracteres de la variable especial IFS (Separador interno de campos), que se predetermina (al menos en mi versión de bash) a los tres caracteres espacio, pestaña y línea nueva .

echo "$lines", por otro lado, significa formar un único argumento nuevo a partir del valor exacto de la variable lines.

Para obtener más información, consulte las secciones "Ampliación" y "División de palabras" de la página del manual de bash.

+1

Gracias, funciona. ¿Podrías explicar la diferencia? – Dagang

+3

+1 para una elaboración muy útil. – harpo

0

Usando el puerto de Windows para grep (no la pregunta original, doy kow y no aplicable a * nix). Encontré que -U resolvió el problema muy bien.

Desde el --help: -U

, --binary No quita caracteres CR en EOL (MSDOS)

+0

Funciona. Gracias @Haggisbreath. usando -U registros imprimiéndose con nueva línea. El comando grep es ... electron app.js | grep - buffer en línea -i -e "error" -U | tee logs.txt – Gaurav

Cuestiones relacionadas