GNU/Linux >> Linux の 問題 >  >> Linux

Linux –特定の単語をgrepしてテキストを取得する方法は?

ホスト名をリストしたテキストファイルがあり、そのすぐ下の行にソルトミニオンの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とは異なり、複数の一致に対して機能することに注意してください。 上記のソリューションでは、最初の一致のみが得られます。


Linux
  1. Linux で GREP を使用して特定のテキストを検索する方法

  2. Linux で特定のユーザーに対して特定のコマンドを無効にする方法

  3. Linux でヘッダーとトレーラー行をファイルに追加する方法

  1. テキスト操作のための3つの必知のLinuxコマンド

  2. 複雑な検索のためにfindとgrepを組み合わせる方法は? (GNU/linux、find、grep)

  3. 特定の単語をgrepしてテキストを取得する方法

  1. Linux – Dmesgで何をgrepするかを知る方法は?

  2. Grep –recursiveを使用して、「不要な」および「必要な」単語を含む特定の行を除外するにはどうすればよいですか?

  3. Linux で単語を検索し、行全体を表示する