我想刪除列的一部分(第七列:/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"....
我只想刪除所有用戶,這也意味著 user1 和 user2 因為我只想分析請求,與用戶無關,就像這樣
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| {印$7}'| awk -F/ '{print $3}' 但我不知道如何在第七列替換此請求,我可以在其中找到我的請求謝謝
答案1
sed 's,POST /[^/]*/,POST /,' logfile | awk ...
或在 awk 腳本中如果使用預設欄位分隔符號 (FS)
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* 之前的空格。