從日誌檔案中刪除一些部分

從日誌檔案中刪除一些部分

我想刪除列的一部分(第七列:/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* 之前的空格。

相關內容