sed 's,POST /[^/]*/,POST /,' logfile | awk ...
ou no script awk se você usar o separador de campo padrão (FS)
sub ("POST /[^/]*/", "POST /", $7) ;
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
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.
Tags text-processing