如何使用一行sed命令反转用逗号分隔的每对字段

时间:2017-01-21 22:12:01

标签: shell

如何使用一行sed命令反转用逗号分隔的每对字段。

示例输入:

23,A,49,B,2,C
25,B,27,D,8, 

示例输出:

A,23,B,49,C,2
B,25,D,27,,8

1 个答案:

答案 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交换逗号分隔的字段