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.