Puede hacer el siguiente while read
bucle, que se alimentará del resultado del grep
comando utilizando la llamada sustitución de proceso:
while IFS= read -r result
do
#whatever with value $result
done < <(grep "xyz" abc.txt)
De esta manera, no tiene que almacenar el resultado en una variable, sino "inyectar" directamente su salida al bucle.
Tenga en cuenta el uso IFS=
y de read -r
acuerdo con las recomendaciones de BashFAQ / 001: ¿Cómo puedo leer un archivo (flujo de datos, variable) línea por línea (y / o campo por campo)? :
La opción -r para leer evita la interpretación de la barra invertida (generalmente se usa como un par de línea nueva de barra invertida, para continuar en varias líneas o para escapar de los delimitadores). Sin esta opción, cualquier barra invertida sin escape en la entrada será descartada. Casi siempre debe usar la opción -r con lectura.
En el escenario anterior, IFS = evita el recorte de los espacios en blanco iniciales y finales. Elimínalo si quieres este efecto.
En cuanto a la sustitución del proceso, se explica en la página de hackers de bash :
La sustitución de procesos es una forma de redireccionamiento donde la entrada o salida de un proceso (alguna secuencia de comandos) aparece como un archivo temporal.
grep -o
este tipo de cosas. La-o
bandera devolverá solo el texto que coincida, con una coincidencia por línea de salida. (No es exhaustivo, por lo queecho aaa |grep 'a*'
solo te da "aaa" y omite las tres coincidencias parciales "", "a" y "aa")