我有一个文件:
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
如何使用简单的命令执行此操作?
答案 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