Exclua algumas partes de um arquivo de log

Exclua algumas partes de um arquivo de log

Quero deletar parte de uma coluna (7ª 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 deletar todos os usuários, isso significa usuário1 e usuário2 também, porque eu só quero analisar a solicitação, não importa os usuários.

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

Tentei usar este comando apenas para extrair o request(/index.php?m=xxxx) cat /var/log/test.log| {imprimir $7}'| awk -F/ '{print $3}' mas não sei como substituir esta solicitação na 7ª coluna onde posso encontrar minha solicitação Obrigado

Responder1

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

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

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

Responder2

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 letras e números (para nome de usuário) e termine com '/' e seja substituído por apenas '/' para cada linha do 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.

informação relacionada