たとえば、機能別にログファイルをフィルタリングしたいとします。
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&xxxx...
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer&xxxx...
197.xx.x.x - - [13/Apr/2017:09:10:xx +0200] "POST /userx/index.php?m=meeting&xxxx...
197.xx.x.x - - [13/Apr/2017:09:20:xx +0200] "POST /userx/index.php?m=dashboard&xxxx...
この場合、私の機能は連絡先、アカウント、会議、ダッシュボードであり、デフォルトのスタートページを無視したいと思います。使った
awk '$7 !~ /m=dashboard/ ' log file
私の質問はファイル内のより多くの機能を無視できますか?
cat file:
dashboard
meeting
この行だけを持つには:
195.xx.x.x - - [13/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts
192.xx.x.x - - [13/Apr/2017:09:45:xx +0200] "POST /userx/index.php?m=customer
ベストアンサー1
sed '/\//!{H;d};G;/m=\(.*\)\n.*\1/d;P;d' file log
説明:file
フィルター・キーワードを最初に読み取り、次にログ・ファイルを読み取ります。 noを含む行は/
キーワードとして解釈され、予約済みスペース()に追加されますH
。他の行には予約済みスペースが追加され、()キーワードリストでG
次のキーワードが繰り返されると削除されます()。それ以外の場合は、追加の保存スペース()なしで印刷されます。m=
/m=\(.*\)\n.*\1/d
P