GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿cómo buscar una palabra específica y tomar texto?

Tengo un archivo de texto que enumera un nombre de host y en la línea directamente debajo indica los resultados de un ping de un salt minion. Aquí hay una salida de ejemplo:

T5F6Z12:
   Minion did not return. [Not connected]

Necesito poder identificar primero si existe el texto (Minion no regresó) y, de ser así, tomar el nombre de host asociado con el error para poder ejecutar otros comandos contra ese servidor.

Empecé con esto:

if grep -q "Minion" /srv/salt/test/ping_results
then
    

Así que estoy bastante seguro de que necesito buscar la palabra "Minion" porque solo aparecerá para los servidores que fallaron la prueba. Pero una vez que identifiqué que existe, no estoy seguro de cómo capturar el nombre de host asociado arriba en el archivo de texto.

Respuesta aceptada:

Podrías usar -B1 para imprimir la línea anterior también y luego tomar solo la primera línea:

$ grep -B1 'Minion' ip.txt
T5F6Z12:
   Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:

O hazlo con awk :

$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12

Aquí p sigue guardando la última línea. Cuando la línea de entrada contiene Minion , luego se imprime. Tenga en cuenta que esto funcionará para múltiples coincidencias a diferencia de grep solución anterior que da solo la primera coincidencia.


Linux
  1. Usando Grep –recursive, ¿Cómo excluir una línea específica con la palabra 'no deseado' y 'querido' en ella?

  2. Cómo deshabilitar un comando específico para un usuario específico en Linux

  3. Cómo agregar una línea de encabezado y final a un archivo en Linux

  4. ¿Cómo encuentro todos los archivos que contienen texto específico en Linux?

  5. grep recursivamente para un tipo de archivo específico en Linux

Cómo hacer Grep para múltiples cadenas y patrones

Cómo comparar y fusionar archivos de texto en Linux

Cómo comparar y fusionar archivos de texto en Linux (parte 2)

Cómo ejecutar un comando durante un tiempo específico en Linux

Cómo encontrar y eliminar archivos que contienen un texto específico en sus nombres en Linux

Micro:un editor de texto basado en la línea de comandos para Linux