使用sed,如何用Y替换所有出现的X,但只能看到Z?

时间:2014-05-21 16:22:45

标签: regex replace sed

我正在尝试用竖线(|)替换所有空格,但只能在看到两个双引号之后。

输入:

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

3 个答案:

答案 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|-