如何使用一行sed命令反转用逗号分隔的每对字段。
示例输入:
23,A,49,B,2,C
25,B,27,D,8,
示例输出:
A,23,B,49,C,2
B,25,D,27,,8
答案 0 :(得分:1)
sed -e 's/\s*$//' -e 's/^\([^,]*,[^,]*,\)*[^,]*,[^,]*$/&,/' -e 's/\([^,]*\),\([^,]*\),/\2,\1,/g'
例如,
$ sed -e 's/^\([^,]*,[^,]*,\)*[^,]*,[^,]*$/&,/' -e 's/\([^,]*\),\([^,]*\),/\2,\1,/g' <<EOF
23,A,49,B,2,C
25,B,27,D,8,
EOF
A,23,B,49,C,2,
B,25,D,27,,8,
说明:
s/\s*$//
删除了行尾的任何空格字符。 s/^\([^,]*,[^,]*,\)*[^,]*,[^,]*$/&,/
会附加逗号。
\([^,]*,[^,]*,\)*
是一组东西 - 不是通信逗号,不是逗号逗号,重复0次或更多次,然后是[^,]*,[^,]*
是非逗号昏迷,其后是可选的非逗号 s/\([^,]*\),\([^,]*\),/\2,\1,/g
交换逗号分隔的字段