我正在尝试用竖线(|)替换所有空格,但只能在看到两个双引号之后。
输入:
02/15/2014 00:00:35 CST 1400130035 192.168.39.60 [15/Feb/2015:04:05:10 +0000] 331184 "POST /Test?param=1 HTTP/1.1" 200 '-' 450/-/351 - - - 34322155 TEST -
输出:
02/15/2014 00:00:35 CST 1400130035 192.168.39.60 [15/Feb/2015:04:05:10 +0000] 331184 "POST /Test?param=1 HTTP/1.1"|200|'-'|450/-/351|-|-|-|34322155|TEST|-
THX
答案 0 :(得分:2)
使用测试:
sed -e :a -e 's/\(.*".*".*\) /\1|/;ta'
使用保持缓冲区:
sed 'h;s/.*".*"//;s/ /|/g;x;s/\(.*".*"\).*/\1/;G;s/\n//'
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/"/&\n/2;h;y/ /|/;G;s/.*\n(.*)\n(.*)\n.*/\2\1/' file
在第二个"
后放置一个标记并复制该行。用|
替换所有空格,然后附加复制的行并根据需要重新构建该行。
答案 2 :(得分:0)
只需使用awk:
$ awk 'BEGIN{FS=OFS="\""} {gsub(/ /,"|",$3)} 1' file
02/15/2014 00:00:35 CST 1400130035 192.168.39.60 [15/Feb/2015:04:05:10 +0000] 331184 "POST /Test?param=1 HTTP/1.1"|200|'-'|450/-/351|-|-|-|34322155|TEST|-