bash - salir - usar el comando grep en linux
¿Cómo preservar el resultado grep con nueva línea? (2)
Tu quieres decir
echo "$lines"
en lugar de
echo $lines
Elaborar:
echo $lines
significa "Forme un nuevo comando reemplazando $lines
con el contenido de la variable denominada lines
, dividiéndola en espacios en blanco para formar cero o más argumentos nuevos al comando echo
. Por ejemplo:
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, porque el shell ignora el tipo específico de espacio en blanco entre las palabras individuales almacenadas en las lines
variables. En realidad, para ser más precisos, el shell divide el contenido de la variable en los caracteres de la variable especial IFS
(Separador de campo interno), que por defecto (al menos en mi versión de bash) se divide en el espacio, tabulador y nueva línea de tres caracteres. .
echo "$lines"
, por otro lado, significa formar un solo argumento nuevo a partir del valor exacto de las lines
variables.
Para obtener más detalles, consulte las secciones "Expansión" y "División de palabras" de la página del manual de bash.
Quiero asignar el resultado de grep a una variable para su uso posterior:
lines=`cat abc.txt | grep "hello"`
pero lo que encontré es que $ líneas ya no contienen caracteres de nueva línea. Así que cuando lo hago
echo $lines
Sólo se imprime una línea. ¿Cómo puedo conservar el carácter de nueva línea, por lo que cuando hago eco de $ líneas, es lo mismo que cat abc.txt | grep "hola".
Usando el puerto de Windows para grep (no es la pregunta original, sé que no es aplicable a * nix). Encontré que -U
resolvió el problema muy bien.
De la --help
-U, --binary no elimina los caracteres CR en EOL (MSDOS)