sed除了常用的文本替换之外,还可以通过正则表达取出需要的字段,具体操作如下:
head -n 20 /data/logs/nginx.log |sed 's/\([^ ]*\) .*\(imei\=[^&]*\).*/\1,\2/' # 过虑前: 125.126.250.49 - - [09/Jul/2015:00:00:01 +0800] "GET /client/spiritscreen/recommend?version=12.150417&imei=51B5ECC4A771CEF1D3BA81B34F4416C0&channelId=jltop_m_scb07&p=com.GreanMaster.pixelmonmcpecraftrun2 HTTP/1.0" 200 0.032 938 "-" "-" "125.126.250.49" "-" "-" # 过虑后: 125.126.250.49,imei=51B5ECC4A771CEF1D3BA81B34F4416C0 # 其中: [^ ]:表示匹配非空 \1,\2:表示取出前面括号内的对应内容,并心逗号隔开