Estate atento porque en este tutorial vas a hallar la contestación que buscas.
Solución:
Hay muchas formas de lograr esto.
Usando awk
Lo siguiente envía cualquier línea que coincida coolregex
para archivar1. Todas las demás líneas van al archivo2:
./mycommand.sh | awk '/[coolregex]/print>"file1";next 1' >file2
Cómo funciona:
-
/[coolregex]/print>"file1";next
Cualquier línea que coincida con la expresión regular
coolregex
se imprimen afile1
. Luego, omitimos todos los comandos restantes y saltamos para comenzar de nuevo en elnext
línea. -
1
Todas las demás líneas se envían a stdout.
1
es la abreviatura críptica de awk para imprimir la línea.
También es posible dividir en múltiples flujos:
./mycommand.sh | awk '/regex1/print>"file1" /regex2/print>"file2" /regex3/print>"file3"'
Uso de la sustitución de procesos
Esto no es tan elegante como la solución awk pero, para completar, también podemos usar múltiples greps combinados con la sustitución de procesos:
./mycommand.sh | tee >(grep 'coolregex' >File1) | grep -v 'coolregex' >File2
También podemos dividirnos en múltiples flujos:
./mycommand.sh | tee >(grep 'coolregex' >File1) >(grep 'otherregex' >File3) >(grep 'anotherregex' >File4) | grep -v 'coolregex' >File2
sed -n -e '/pattern_1/w file_1' -e '/pattern_2/w file_2' input.txt
w filename
– escribe el espacio del patrón actual en el nombre del archivo.
Si desea que todas las líneas coincidentes vayan a file_1
y todas las líneas que no coinciden con file_2
, tu puedes hacer:
sed -n -e '/pattern/w file_1' -e '/pattern/!w file_2' input.txt
o
sed -n '/pattern/!p;d; w file_1' input.txt > file_2
Explicación
/pattern/!p;d;
/pattern/!
– negación – si una línea no contienepattern
.p
– imprime el espacio del patrón actual.d
– eliminar el espacio del patrón. Iniciar el siguiente ciclo.- por lo tanto, si una línea no contiene un patrón, imprime esta línea en la salida estándar y selecciona la siguiente línea. La salida estándar se redirige a la
file_2
en nuestro caso. La siguiente parte de lased
texto (w file_1
) no alcanza mientras la línea no coincide con el patrón.
w file_1
– si una línea contiene un patrón, el/pattern/!p;d;
parte se salta (porque se ejecuta sólo cuando el patrón no coincide) y, por lo tanto, esta línea va a lafile_1
.
Nos puedes ayudar nuestra tarea exponiendo un comentario o dejando una valoración te estamos agradecidos.