¿Cómo buscar "incluir" y "excluir otro término" del archivo?

¿Cómo buscar "incluir" y "excluir otro término" del archivo?

Estoy intentando crear una búsqueda grep que deba incluir el término y excluir otro término. Intento utilizar varias opciones de "patrón" -E pero no ha funcionado.

Aquí hay un ejemplo de un comando que probé.

grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154" file.csv

pero los resultados de salida solo coinciden con la segunda restricción grep -Eiv "10.10.210.154"

Respuesta1

Suponiendo que desea buscar \,17\:31pero no desde IP10\.10\.210\.154

Puedes usar esto.

grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154" 

Respuesta2

Nota:la otra respuestadebería funcionar pero no explica nada; De ahí mi respuesta explicativa.

Le dijiste al segundo grepque leyera file.csv, y así lo hace. Ignora su entrada estándar porque esto es lo que grephace cuando opera en archivos.

En efecto, el segundo grepactúa como si el primero no estuviera allí. Sale después de procesar el archivo e imprimir su resultado (si corresponde).

El primero grepespera entrada (normalmente desde el teclado, si se ejecuta en un shell interactivo). Puede tomar muchas líneas e incluso imprimir muchas líneas (coincidentes) en su salida estándar, hasta que el buffer de canalización decida pasar la salida al segundo grep. Luego, si el segundo grepya no existe, grepse notifica al primero que la tubería está rota; sale.

O puede presionar Ctrl+ Dpara indicar el final de la entrada; o puedes presionar Ctrl+ Cpara matar al primero grep(y al segundo, si todavía está vivo). Pero esto no solucionará su flujo de datos.

Un flujo de datos adecuado es así: necesita que el primero greplea el archivo y luego canalice el resultado al segundo:

grep -Ei "\,17\:31" file.csv | grep -Eiv "10\.10\.210\.154"
# or
<file.csv grep -Ei "\,17\:31" | grep -Eiv "10\.10\.210\.154"

Esta última sintaxis tiene al menos una ventaja, explicada al final deesta otra respuesta mia.

información relacionada