GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux – Wie kann man nach einem bestimmten Wort suchen und Text greifen?

Ich habe eine Textdatei, die einen Hostnamen auflistet und in der Zeile direkt darunter die Ergebnisse eines Pings eines Salt Minion angibt. Hier ist eine Beispielausgabe:

T5F6Z12:
   Minion did not return. [Not connected]

Ich muss zuerst feststellen können, ob der Text (Minion did not return) existiert, und wenn ja, den mit dem Fehler verknüpften Hostnamen abrufen, damit ich andere Befehle für diesen Server ausführen kann.

Ich habe damit begonnen:

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

Ich bin mir also ziemlich sicher, dass ich nach dem Wort „Minion“ suchen muss, da es nur für Server angezeigt wird, die den Test nicht bestanden haben. Aber nachdem ich festgestellt habe, dass es existiert, bin ich mir nicht sicher, wie ich den zugehörigen Hostnamen darüber in der Textdatei abrufen soll.

Akzeptierte Antwort:

Sie könnten -B1 verwenden um auch die vorherige Zeile zu drucken und dann nur die erste Zeile zu greifen:

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

Oder machen Sie es mit awk :

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

Hier p speichert immer die letzte Zeile. Wenn die Eingabezeile Minion enthält , dann wird es gedruckt. Beachten Sie, dass dies im Gegensatz zu grep für mehrere Übereinstimmungen funktioniert obige Lösung, die nur die erste Übereinstimmung liefert.


Linux
  1. Linux – Woher wissen Sie, wofür Sie in Dmesg grep müssen?

  2. So deaktivieren Sie einen bestimmten Befehl für einen bestimmten Benutzer in Linux

  3. So fügen Sie einer Datei in Linux Header- und Trailer-Zeile hinzu

  4. Wie finde ich unter Linux alle Dateien, die bestimmten Text enthalten?

  5. grep rekursiv für einen bestimmten Dateityp unter Linux

Wie man nach mehreren Zeichenfolgen und Mustern grep

Wie man Textdateien unter Linux vergleicht und zusammenführt

Wie man Textdateien unter Linux vergleicht und zusammenführt (Teil 2)

So führen Sie einen Befehl für eine bestimmte Zeit in Linux aus

So finden und löschen Sie Dateien, die einen bestimmten Text in ihrem Namen in Linux enthalten

Micro – Ein befehlszeilenbasierter Texteditor für Linux