ログファイルから一部を削除する

ログファイルから一部を削除する

スペースで定義されている列の一部(7番目の列:/user1/index...)を削除したいです。これは私のログファイルの例です。

192.xx.xxx - - [07/Apr/2017:14:21:15 +0200] "POST /user1/index.php?m=xxxxx&doajax=do_ajax_request&action=xxxx HTTP/1.1" ...
192.xx.x.xx - - [07/Apr/2017:14:21:15 +0200] "GET /user2/index.php?m=xxxxx&doajax=do_ajax_request&action=xxxxx HTTP/1.1".... 

私はユーザー1とユーザー2も含めたすべてのユーザーを削除したいのですが、それはユーザーが何であるかに関係なく、リクエストを分析したいだけだからです。

192.xx.xxx - - [07/Apr/2017:14:21:15 +0200] "POST /index.php?m=xxxxx&doajax=do_ajax_request&action=xxxx HTTP/1.1" ...
192.xx.x.xx - - [07/Apr/2017:14:21:15 +0200] "POST /index.php?m=xxxxx&doajax=do_ajax_request&action=xxxxx HTTP/1.1".... 

このコマンドを使用してリクエスト(/index.php?m=xxxx)を抽出しようとしましたが、cat /var/log/test.log| {print $7}'| awk -F/ '{print $3}'ですが、このリクエストを7番目の列に置き換える方法がわかりません。リクエストを見つける場所がわかりません。ありがとうございます。

答え1

sed 's,POST /[^/]*/,POST /,'  logfile | awk ... 

または、デフォルトのフィールドセパレータ(FS)を使用する場合はawkスクリプトで

sub ("POST /[^/]*/", "POST /", $7) ; 

答え2

以下の sed オプションを試すことができます。

sed -i 's:/[a-zA-Z0-9]*/:/:2' logfile

ここでは、'/' で始まり、アルファベットと数字 (ユーザー名用) が含まれ、'/' で終わるパターンを検索し、ファイル内の各行を '/' だけに置き換えます。

または

sed -i 's: /[a-zA-Z0-9]*/:/:2' logfile

ここで、最初のコマンドとの唯一の違いは、行の最初の /user* の前にもスペースが取られることです。

関連情報