用于交换列的 SED 表达式

SED expression for swapping columns

我正在尝试弄清楚如何使用 SED 表达式交换 columns1 和 column2,由“:”分隔。

案例:

column1:column2
column1:column2
column1:column2

我想改成这样:

column2:column1
column2:column1
column2:column1

我尝试了以下方法,但它只是输出,没有任何变化。

sed 's/\([^ ]*\)[ ][ ^C\([^ ]*\)/ /' test.txt > test1.txt

非常感谢您的帮助。

第一个解决方案: 能否请您尝试以下操作。在这里使用 OP 的反向引用尝试。

sed 's/\([^:]*\):\(.*\)/:/' Input_file

第二个解决方案:awk 中使用临时变量并交换两个字段的值。

awk 'BEGIN{FS=OFS=":"} {tmp=;=;=tmp} 1' Input_file

或者按照 Sundeep 的建议尝试简单地打印它们:

awk 'BEGIN{FS=OFS=":"} {print , }' Input_file

为什么 OP 的尝试不起作用: OP 使用反向引用功能的方法看起来不错,但在正则表达式中 OP 正在寻找 space 来匹配不存在的,所以我们需要根据 Input_file 提及 :,然后稍作调整就可以工作。