ホスト名をリストしたテキストファイルがあり、そのすぐ下の行にソルトミニオンのpingの結果が記載されています。出力例は次のとおりです。
T5F6Z12:
Minion did not return. [Not connected]
最初に、テキスト(Minionが返さなかった)が存在するかどうかを識別できる必要があります。存在する場合は、エラーに関連付けられたホスト名を取得して、そのサーバーに対して他のコマンドを実行できるようにします。
私はこれから始めました:
if grep -q "Minion" /srv/salt/test/ping_results
then
したがって、「Minion」という単語は、テストに失敗したサーバーにのみ表示されるため、grepする必要があると確信しています。しかし、それが存在することを確認した後は、テキストファイルでその上にある関連するホスト名を取得する方法がわかりません。
承認された回答:
-B1
を使用できます 前の行も印刷してから、最初の行だけを取得するには:
$ grep -B1 'Minion' ip.txt
T5F6Z12:
Minion did not return. [Not connected]
$ grep -B1 'Minion' ip.txt | head -n1
T5F6Z12:
または、awk
で実行します :
$ awk '/Minion/{print p} {p=$0}' ip.txt
T5F6Z12:
$ awk '/Minion/{sub(/:$/, "", p); print p} {p=$0}' ip.txt
T5F6Z12
ここでp
最後の行を保存し続けます。入力行にMinion
が含まれている場合 、それからそれは印刷されます。これは、grep
とは異なり、複数の一致に対して機能することに注意してください。 上記のソリューションでは、最初の一致のみが得られます。