Eliminar algunas partes de un archivo de registro

Eliminar algunas partes de un archivo de registro

Quiero eliminar parte de una columna (séptima columna:/usuario1/index...), está definida por espacio. Este es un ejemplo de mi archivo de registro.

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

Solo quiero eliminar a todos los usuarios, es decir, usuario1 y usuario2 también porque solo quiero analizar la solicitud, no importa los usuarios. Así

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

Intenté usar este comando solo para extraer la solicitud (/index.php?m=xxxx) cat /var/log/test.log| {imprimir $7}'| awk -F/ '{print $3}' pero no sé cómo reemplazar esta solicitud en la séptima columna donde puedo encontrar mi solicitud. Gracias

Respuesta1

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

o en el script awk si usa el separador de campos predeterminado (FS)

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

Respuesta2

Puedes probar la siguiente opción sed.

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

Aquí, busca un patrón que comience con '/' y tenga alfabetos y números (para nombre de usuario) y termine con '/' y se reemplace con solo '/' para cada línea del archivo.

O

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

Aquí la única diferencia con el primer comando es que también ocupa el espacio antes del primer /usuario* en la línea.

información relacionada