Sed使用情况,删除/更改文本

我有一个string,生成如下

OK::82.44.127.13:GB:UNITED KINGDOM:ENGLAND:WOKING:-:51.000:-0.55813:+01:00 

我需要一个sedstring基本上改变

 82.44.127.13;GB UNITED KINGDOM ENGLAND WOKING;51.000;-0.55813 

我认为这将需要多次sed,到目前为止我有:

 sed 's/:-:/;/g' (which will change the :-: to a ;) sed 's/:-/;-/g' (which will change the :- to a ;) sed s/OK:://g (which will strip the OK::) 

但即时通讯卡上如何更改:IP地址和位置之间的一个;,然后删除所有其他:,还剥离的时间?

(注意不是真的IP地址)

awk可以更简单:

 $ awk -F ":" '{print $3";"$4" "$5" "$6" "$7";"$9";"$10}' <<< "OK::82.44.127.13:GB:UNITED KINGDOM:ENGLAND:WOKING:-:51.000:-0.55813:+01:00" 82.44.127.13;GB UNITED KINGDOM ENGLAND WOKING;51.000;-0.55813 

请注意,我打印的东西像$3";"$4" "$5因为字段分隔符正在改变。 否则,我们可以使用: BEGIN{OFS=";"}

 $ awk -F ":" 'BEGIN{OFS=";"}{print $3,$4,$5,$6,$7,$9,$10}' <<< "OK::82.44.127.13:GB:UNITED KINGDOM:ENGLAND:WOKING:-:51.000:-0.55813:+01:00" 82.44.127.13;GB;UNITED KINGDOM;ENGLAND;WOKING;51.000;-0.55813 

这将在一个sed命令中执行所有操作:

 $ echo "OK::82.44.127.13:GB:UNITED KINGDOM:ENGLAND:WOKING:-:51.000:-0.55813:+01:00" | \ sed -r 's/OK::([0-9.]*):([AZ ]*):([AZ ]*):([AZ ]*):([AZ ]*):-:(-?[0-9.]*):(-?[0-9.]*):.*/\1;\2 \3 \4 \5;\6;\7/' 82.44.127.13;GB UNITED KINGDOM ENGLAND WOKING;51.000;-0.55813 

没有awk:

 cut -d: -f 3-7,9,10 | tr ":" ";" | sed -r 's/([AZ]);([AZ])/\1 \2/g'