Awk 用于交换列的SED表达式

Awk 用于交换列的SED表达式,awk,sed,centos,expression,Awk,Sed,Centos,Expression,我正试图找出如何用SED表达式交换列1和以“:”分隔的列2 案例示例: column1:column2 column1:column2 column1:column2 我想换个话题: column2:column1 column2:column1 column2:column1 我尝试了以下方法,但它只是输出,没有任何更改 sed 's/\([^ ]*\)[ ][ ^C\([^ ]*\)/\2 \1/' test.txt > test1.txt 非常感谢您的帮助。第一种解决方案:请尝

我正试图找出如何用SED表达式交换列1和以“:”分隔的列2

案例示例:

column1:column2
column1:column2
column1:column2
我想换个话题:

column2:column1
column2:column1
column2:column1
我尝试了以下方法,但它只是输出,没有任何更改

sed 's/\([^ ]*\)[ ][ ^C\([^ ]*\)/\2 \1/' test.txt > test1.txt
非常感谢您的帮助。

第一种解决方案:请尝试以下内容。在这里使用OP的反向引用尝试

sed 's/\([^:]*\):\(.*\)/\2:\1/' Input_file
第二种解决方案:
awk
中使用临时变量并交换两个字段的值

awk 'BEGIN{FS=OFS=":"} {tmp=$1;$1=$2;$2=tmp} 1' Input_file
或者根据Sundeep的建议,试着简单地打印它们:

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

OP的尝试不起作用的原因:OP使用反向引用功能的方法看起来不错,但在regex中,OP正在寻找不存在的匹配空间,因此我们需要根据输入文件提及
,它应该可以工作,然后稍加调整。

非常感谢。我尽了最大的努力,但是那些SED的表达是令人困惑和困难的。我真的很喜欢你解释不同选择的方式。谢谢,伙计们。顺便说一句,成功了:)