从日志文件中删除一些部分

从日志文件中删除一些部分

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

相关内容