Ver archivos sin líneas con cierta cadena


12

Buscar un programa como tailo lessque me permita ver mis registros sin líneas que contengan una cadena determinada. Por ejemplo, ver mi syslog sin [UFW BLOCK]líneas de entrada UFW ( ).


Si bien no es fácil proporcionar una solución a la descripción exacta de su problema con esta función, es posible que le interese saber que lessofrece la posibilidad de filtrar las líneas mostradas después de un patrón de expresiones regulares. Puede usar esta función escribiendo &seguido del patrón, y puede revertirlo escribiendo &solo.
Aaron

Respuestas:


13

La opción de ajuste de patrones de inversión -vpara grepes realmente útil para esto:

grep -v 'UFW BLOCK' /var/log/syslog

Esto le mostrará todas las líneas que no contienen UFW BLOCK. Como greputiliza expresiones regulares básicas de forma predeterminada, la inclusión de los corchetes hará que busque cualquiera de los caracteres individuales de 'UFW BLOCK', incluido el espacio. Probablemente terminará sin salida. Si necesita asegurarse de que hay corchetes alrededor de la cadena, puede escapar de ellos \[UFW BLOCK\]o usar la -Fopción de grepincluir solo cadenas fijas (Gracias a Zanna y Steeldriver por el consejo sobre esto):

grep -Fv '[UFW BLOCK]' /var/log/syslog

Puede facilitar la visualización canalizando la salida a un localizador como less:

grep -v 'UFW BLOCK' /var/log/syslog | less

O redirija el resultado a un archivo en su directorio de inicio para verlo más tarde:

grep -v 'UFW BLOCK' /var/log/syslog > ~/filtered_syslog

2
También puede usar el fgrepcomando que es equivalente a grep -F.
Tulains Córdova

2
@ TulainsCórdova El hombre de grep dice que "la invocación directa como egrep o fgrep está en desuso, pero se proporciona para permitir que las aplicaciones históricas que dependen de ellos se ejecuten sin modificaciones". No sé si alguna vez actuarán en esta desaprobación, pero supongo que usar estos comandos no es la mejor práctica
Aaron

5

También puede usar sedel dcomando 's para eliminar las líneas con el patrón de la secuencia:

sed '/\[UFW BLOCK\]/d' /var/log/syslog

Escapamos []como normalmente denotan una clase de personaje, que significa "emparejar cualquier cosa aquí"


5

Puede usar cualquier herramienta con capacidades de edición. Ya le han dado soluciones usando grepy sed, aquí hay algunas otras opciones. Todo esto puede ser fácilmente instalado tubos a lesso moreo cualquier otra cosa.

  1. Perl

    perl -ne 'print unless /\[UFW BLOCK\]/' /var/log/syslog
    

    Como se trata de Perl, TIMTOWDI! .

    perl -pe '$_="" if /\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ || print' /var/log/syslog
    perl -ne 'print if !/\[UFW BLOCK\]/' /var/log/syslog
    perl -ne '!/\[UFW BLOCK\]/ && print' /var/log/syslog
    perl -ne '/\[UFW BLOCK\]/ ? "" : print' /var/log/syslog
    
  2. awk

    awk '!/\[UFW BLOCK\]/' file
    

2

También puedes usar awk:

awk '!/PATTERN/' log

Lo uso cuando tengo más de un "patrón" y no quiero usar dos grepcomo:

... | grep -v foo | grep -v bar

cuál es la sintaxis:

awk '!/PATTERN/ && !/PATTERN2/' log

"Lo uso cuando tengo más de un" patrón "y no quiero usar dos grep como" ------ grep -Ev "foo|bar"?
αғsнιη

También puede usar -epara definir múltiples patrones. grep -v -e 'foo' -e 'bar'
Arronical

@AFSHIN (No sé cómo se eliminó mi comentario), quise decir para un lógico y no o;)
Ravexina

1

Con lessla &opción de comando, es posible filtrar para mostrar solo el patrón coincidente deseado como se muestra a continuación,

& /PATTERN/

en su caso, si desea que las líneas de filtro UFW BLOCKno se muestren en la salida, simplemente puede usar &!lo siguiente:

&! /UFW BLOCK/
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.