¿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"?

Respuestas:


2

Yo sugiero:

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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.