GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:come grep per una parola specifica e afferrare il testo?

Ho un file di testo che elenca un nome host e nella riga direttamente sotto indica i risultati di un ping di un servitore salt. Ecco un esempio di output:

T5F6Z12:
   Minion did not return. [Not connected]

Devo prima essere in grado di identificare se il testo (Minion non è stato restituito) esiste e, in tal caso, prendere il nome host associato all'errore in modo da poter eseguire altri comandi su quel server.

Ho iniziato con questo:

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

Quindi sono abbastanza sicuro di dover cercare la parola "Minion" perché verrà visualizzata solo per i server che hanno fallito il test. Ma una volta che ho identificato che esiste, non sono sicuro di come prendere il nome host associato sopra di esso nel file di testo.

Risposta accettata:

Potresti usare -B1 per stampare anche la riga precedente e poi prendere solo la prima riga:

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

Oppure fallo con awk :

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

Qui p continua a salvare l'ultima riga. Quando la riga di input contiene Minion , quindi viene stampato. Nota che funzionerà per più corrispondenze a differenza di grep soluzione sopra che dà solo la prima corrispondenza.


Linux
  1. 3 comandi Linux da conoscere per la manipolazione del testo

  2. Come disabilitare un comando specifico per un utente specifico in Linux

  3. Come aggiungere riga di intestazione e trailer a un file in Linux

  4. Come trovo tutti i file contenenti testo specifico su Linux?

  5. grep in modo ricorsivo per un tipo di file specifico su Linux

Come Grep per più stringhe e pattern

Come confrontare e unire file di testo su Linux

Come confrontare e unire file di testo su Linux (parte 2)

Come eseguire un comando per un tempo specifico in Linux

Come trovare ed eliminare file che contengono un testo specifico nei loro nomi in Linux

Micro:un editor di testo basato su riga di comando per Linux