Я хочу удалить часть столбца (7-й столбец:/user1/index...), он определен пробелом. Это пример моего файла журнала
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"....
Я просто хочу удалить всех пользователей, то есть user1 и user2 тоже, потому что я просто хочу проанализировать запрос, неважно, какие пользователи. Вот так
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"....
Я пытался использовать эту команду только для извлечения запроса (/index.php?m=xxxx) cat /var/log/test.log| {print $7}'| awk -F/ '{print $3}', но я не знаю, как заменить этот запрос в 7-м столбце, где я могу найти свой запрос Спасибо
решение1
sed 's,POST /[^/]*/,POST /,' logfile | awk ...
или в скрипте awk, если вы используете разделитель полей по умолчанию (FS)
sub ("POST /[^/]*/", "POST /", $7) ;
решение2
Вы можете попробовать следующую опцию sed.
sed -i 's:/[a-zA-Z0-9]*/:/:2' logfile
Здесь он ищет шаблон, который начинается с «/», содержит буквы алфавита и цифры (для имени пользователя) и заканчивается на «/», заменяется просто на «/» для каждой строки в файле.
Или
sed -i 's: /[a-zA-Z0-9]*/:/:2' logfile
Единственное отличие от первой команды в том, что она также занимает пробел перед первым /user* в строке.