Замена строки в журнале с помощью Sed - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть журнал доступа, например:

10.2.21.120 - - [26/Jan/2013:19:15:11 +0000] "GET /index.html HTTP/1.1" 200 6 "-" "Mozilla/0.0 (X11; Linux x86_64) AppleWebKit/000.00 (KHTML, like Gecko) Chrome/0.0.0000.00 Safari/000.00"

Я хочу заменить пользовательский агент. Результирующая:

10.2.21.120 - - [26/Jan/2013:19:15:11 +0000] "GET /index.html HTTP/1.1" 200 6 "-" "NetScape"

Я пытаюсь изменить все после "-", но Сед пропускает "" и изменить все после -

что-то вроде этого sed 's/[(][^)]*[)]/\(NetScape\)/g' input` меняет user-agent только в скобках

1 Ответ

0 голосов
/ 02 ноября 2018

Используя sed, вы можете заменить подстроку между кавычками в конце строки:

sed 's/"[^"]*"$/"NetScape"/'

Здесь "[^"]*"$ соответствует ", затем 0+ символов, отличных от ", а затем " в конце строки. Вам не нужен оператор g, поскольку sed обрабатывает файлы построчно.

См. онлайн sed демо :

log='10.2.21.120 - - [26/Jan/2013:19:15:11 +0000] "GET /index.html HTTP/1.1" 200 6 "-" "Mozilla/0.0 (X11; Linux x86_64) AppleWebKit/000.00 (KHTML, like Gecko) Chrome/0.0.0000.00 Safari/000.00"'
sed 's/"[^"]*"$/"NetScape"/' <<< "$log"
# => 10.2.21.120 - - [26/Jan/2013:19:15:11 +0000] "GET /index.html HTTP/1.1" 200 6 "-" "NetScape"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...