如何使用bash交换文件中的两个字符串?

时间:2014-05-20 11:16:29

标签: regex bash shell swap

我有一个文件:

q12 q25 
q13 q15
q78 q13
q42 q54
q13 q12
q12 q74
q45 q25

我想替换所有12 to 13和任何13 to 12

q13 q25 
q12 q15
q78 q12
q42 q54
q12 q13
q13 q74
q45 q25

如何使用简单的命令执行此操作?

3 个答案:

答案 0 :(得分:3)

使用perl可以避免使用占位符字符串来执行替换。

创建所需转换的哈希并执行替换:

perl -pe 'BEGIN{%h=("12" => "13", "13" => "12")} s/(12|13)/$h{$1}/g' inputfile

对于您的样本输入,它会产生:

q13 q25
q12 q15
q78 q12
q42 q54
q12 q13
q13 q74
q45 q25

使用-i选项将更改保存到文件中。

答案 1 :(得分:2)

您可以尝试以下方式:

sed "s/13/tmp/g;s/12/13/g;s/tmp/12/g" file

如果要在文件中替换,可以使用-i选项:

sed -i "s/13/tmp/g;s/12/13/g;s/tmp/12/g" file

答案 2 :(得分:1)

你可以试试这个:

perl -i.bak -ne '/12/ && !/13/ && s/12/13/g && print; /13/ && !/12/ && s/13/12/g && print; !/12/ && !/13/ && print ' file; cat file
q13 q25 
q12 q25 
q12 q15
q78 q12
q42 q54
q13 q74
q12 q74
q45 q25