¿Filtrar líneas si se encontró el número de cadenas?

1

Necesidad de filtrar y mostrar las líneas de registro, si la línea contiene exactamente 2 comas , y no contiene una cadena específica. ¿Qué comando de Linux necesito usar, awk, grep, ¿cuál es la expresión?

Para la segunda condición utilizo esto:

awk '!/specificstring/' ./log/file/path

Dos cheques con coma, no sé cómo poner. Por lo general, la línea es así dos:

arbitrary,arbitrary,arbitrary,arbitrary
arbitrary,arbitrary,arbitrary

Necesitamos el segundo tipo de línea.

Intenté algo como esto:

grep -P '[^,]+[,][^,]+[,][^,]+[,]"specificstring"[^,]+' ./log/file/path

¿Cómo excluir "cadena específica"?

János
fuente

Respuestas:

2

Yo sugiero:

grep '^[^,]*,[^,]*,[^,]*$' file | grep -v 'specificstring'
Cyrus
fuente
0

Esto se puede hacer en una sola pasada con awk, combinando las dos condiciones:

awk '/^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

Lo mismo se puede lograr en perl con un comando casi idéntico:

perl -lane 'print if /^[^,]*,[^,]*,[^,]*$/ && !/specificstring/' ./log/file/path

Para responder a la pregunta en su sentido más genérico, es decir, filtrar líneas si se encuentra un número arbitrario de cadenas de ocurrencias :

perl -lane '@m = /,/g; print if scalar @m == 2 and !/specificstring/' ./log/file/path
simlev
fuente