GNU/Linux >> Znalost Linux >  >> Linux

Linux – Jak šáhnout po konkrétním slovu a uchopit text?

Mám textový soubor, který uvádí název hostitele a v řádku přímo pod uvádí výsledky pingu salt miniona. Zde je příklad výstupu:

T5F6Z12:
   Minion did not return. [Not connected]

Potřebuji být schopen nejprve identifikovat, zda existuje text (Minion se nevrátil), a pokud ano, vezměte název hostitele spojený s chybou, abych mohl proti tomuto serveru spouštět další příkazy.

Začal jsem s tímto:

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

Takže jsem si docela jistý, že musím šáhnout po slovu „Minion“, protože se zobrazí pouze pro servery, které v testu neprošly. Ale jakmile jsem zjistil, že existuje, nejsem si jistý, jak získat přidružený název hostitele nad ním v textovém souboru.

Přijatá odpověď:

Můžete použít -B1 vytisknout také předchozí řádek a poté uchopit pouze první řádek:

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

Nebo to udělejte pomocí awk :

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

Zde p stále ukládá poslední řádek. Když vstupní řádek obsahuje Minion , pak se vytiskne. Pamatujte, že to bude fungovat pro více shod na rozdíl od grep řešení, které poskytuje pouze první shodu.


Linux
  1. Jak pomocí rekurzivního Grepu vyloučit konkrétní řádek s „nechtěným“ a „chtěným“ slovem v něm?

  2. Jak najít konkrétní text pomocí GREP v systému Linux

  3. Jak zakázat konkrétní příkaz pro konkrétního uživatele v Linuxu

  1. Jak v Linuxu najdu všechny soubory obsahující konkrétní text?

  2. grep rekurzivně pro konkrétní typ souboru v systému Linux

  3. Jak zkombinovat hledání a grep pro komplexní hledání? ( GNU/linux, find, grep )

  1. Linux – Jak vědět, co dělat Grep v Dmesg?

  2. Jak přidat záhlaví a řádek upoutávky do souboru v Linuxu

  3. Jak najít konkrétní slovo a uchopit text