2

次のように生成された文字列があります

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

基本的に変更するにはsed文字列が必要です

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 アドレスではないことに注意してください)

4

3 に答える 3

3

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
于 2013-07-30T13:15:55.407 に答える
1

awk なし:

cut -d: -f 3-7,9,10  | tr ":" ";" | sed -r 's/([A-Z]);([A-Z])/\1 \2/g'
于 2013-07-30T15:56:02.203 に答える
1

これにより、1 つの sed コマンドですべてが実行されます。

$ echo "OK::82.44.127.13:GB:UNITED KINGDOM:ENGLAND:WOKING:-:51.000:-0.55813:+01:00" | \
sed -r 's/OK::([0-9.]*):([A-Z ]*):([A-Z ]*):([A-Z ]*):([A-Z ]*):-:(-?[0-9.]*):(-?[0-9.]*):.*/\1;\2 \3 \4 \5;\6;\7/'
82.44.127.13;GB UNITED KINGDOM ENGLAND WOKING;51.000;-0.55813
于 2013-07-30T13:22:36.110 に答える