切り捨てられたコマンドフィールドの値から単語と値を切り取る方法は?

切り捨てられたコマンドフィールドの値から単語と値を切り取る方法は?

私のファイルの行形式は次のとおりです。

29.101.26.176 [11/Oct/2017:10:21:41 /pmk/clk?aff_id=5863&off_id=85635&trans_id=easoli4ddq8sssdf&prm2=23398_27530&device_id=864792012331091090 "Mozilla/5.0 Mobile

カットするaff_id=5863必要がありますoff_id=85635trans_id=easoli4ddq8sssdf

cutフィールド内の単語ではなく、コマンドから特定のフィールドのみを切り取ることができます。与えられた単語をどのように分離できますか?

答え1

短いgrep方法:

grep -Eo '([ao]ff|trans)_id=[^&]+' file

出力:

aff_id=5863
off_id=85635
trans_id=easoli4ddq8sssdf

----------

またはアッ固定プロジェクトオーダーのソリューション:

awk -F'[?&]' '{ printf "%s %s %s\n",$2,$3,$4 }' file

出力:

aff_id=5863 off_id=85635 trans_id=easoli4ddq8sssdf

答え2

GNUを使用してsed一致するパターンを削除します。

sed -E 's#([ao]ff|trans)_id=[^&]*&##g' infile

これらの文字列値を取得したい場合。

sed 's#.*\(aff_id=[^&]\).*\(off_id=[^&]\+\).*\(trans_id=[^&]\+\).*#\1 \2 \3#' infile
aff_id=5863 off_id=85635 trans_id=easoli4ddq8sssdf

関連情報