私にファイルがあるとします。
#cat file.log
abc|123|text1 modesc=bpp123 raw_info=clear
abc|123|text2 modesc=pmk123 severity=minor
abc|123|text3 modesc=pnj123 info=good
$ 3印刷で "modesc ="の後にスペースが出るまでどの単語が表示されるかを知りたいです。
私はコマンドの出力が次のようになりたいと思います。
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123
Bashを使って "modesc ="の直後に$ 3という単語を印刷したいと思います。これを行う方法はありますか?
ベストアンサー1
$ sed 's/[^|]*modesc=\([^ ]*\).*$/\1/' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123
sed
これは、最後のフィールド全体を次のスペースの後に続く項目に置き換えるために使用されます。modesc=
$ awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3)} 1' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123
このawk
プログラムは、3番目の列を2つの代替項目に変更します。最初のものはまでのすべてを削除しmodesc=
、2番目は最初の残りのスペースの後のすべてを削除します。1
最後に別の項目を追加すると、変更されたawk
レコードが印刷されます(代替可能{ print }
)。
到着ただ元のデータの3番目の列から次の文字列を取得するには(他のものを除く)、上記のいずれかのコマンドを使用してmodesc=
パイプするcut -d '|' -f3
か、次を使用できます。
sed 's/.*modesc=\([^ ]*\).*$/\1/' file
または
awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3); print $3 }' file