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.