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.