我有如下访问日志:
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跳过""
并在-
之后进行所有更改
类似sed 's/[(][^)]*[)]/\(NetScape\)/g'
输入的内容只能在方括号中更改用户代理
答案 0 :(得分:0)
使用sed
,您可以在行尾替换引号之间的子字符串:
sed 's/"[^"]*"$/"NetScape"/'
在这里,"[^"]*"$
匹配"
,然后是0+个除"
以外的字符,然后是行末的"
。您不需要g
运算符,因为sed
逐行处理文件。
请参见online sed
demo:
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"