Apagar algumas partes de um arquivo de log

0

Eu quero excluir parte de uma coluna (sétima coluna: / user1 / index ...), ela é definida por espaço. Este é um exemplo do meu arquivo de log

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".... 

Eu quero apenas excluir todos os usuários, ou seja, user1 e user2 também, porque só quero analisar a solicitação, não importa os usuários Assim

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".... 

Eu tentei usar este comando apenas para extrair o pedido (/index.php?m=xxxx)  cat /var/log/test.log | {print $ 7} '| awk -F / '{print $ 3}' mas eu não sei como substituir este pedido na sétima coluna onde posso encontrar o meu pedido Obrigado

    
por Sara Quispe 11.04.2017 / 10:45

2 respostas

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

ou no script awk se você usar o separador de campo padrão (FS)

sub ("POST /[^/]*/", "POST /", $7) ; 
    
por 11.04.2017 / 11:33
0

Você pode tentar a opção sed abaixo.

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

Aqui, ele está procurando um padrão que comece com '/' e tenha alfabetos e números (para nome de usuário) e termine com '/' é substituído por apenas '/' para cada linha no arquivo.

Ou

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

Aqui, a única diferença do primeiro comando é que ele também ocupa o espaço antes do primeiro / user * na linha.

    
por 11.04.2017 / 13:44