用于交换列的 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 提及 :
,然后稍作调整就可以工作。
我正在尝试弄清楚如何使用 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 提及 :
,然后稍作调整就可以工作。