web-dev-qa-db-ja.com

見つかったパターンの後に次の単語をgrep、sed、awkで印刷する方法は?

たとえば、「ここにサンプルテキストファイルがあります」を含むlogfile.txtがあるとします。

私のパターンは「サンプル」です。どうすればlogfile.txtのサンプルの横にあるWordを取得できますか。

7
user8580505

Awkでこれを行う1つの方法を次に示します。

$ awk '{for(i=1;i<=NF;i++)if($i=="sample")print $(i+1)}' file
text

説明:

$ awk '{
    for(i=1;i<=NF;i++)        # process every Word
        if($i=="sample")      # if Word is sample
            print $(i+1)      # print the next
}' file

そしてsed:

$ sed -n 's/.* sample \([^ ]*\).*/\1/p' file
text

すなわち。 sample次のスペースで区切られた文字列

pCREとポジティブルックバックを使用したgrep:

$ grep -oP '(?<=sample )[^ ]*' file
text

前の説明を参照してください。

13
James Brown