sed圆形替换

时间:2011-06-10 12:41:57

标签: regex sed

在我的文件input.txt中,我想要替换A-> B,B-> C和C-> A 即我想跑

s/A/B/g;
s/B/C/g;
s/C/A/g;

但是,我不希望模式对新文本进行操作 即,如果我运行上述sed脚本,A变为A-> B-> C-> A,B变为A(B-> C-> A)

有没有办法进行我想要的替换?

由于

4 个答案:

答案 0 :(得分:2)

可能有更好的方法,但如果你的input.txt中没有合适的X和Y,你可以尝试:

s/A/X/g;
s/B/Y/g;
s/C/A/g;
s/X/B/g;
s/Y/C/g;

答案 1 :(得分:1)

我使用trtr 'ABC' 'BCA'

答案 2 :(得分:0)

使用y运算符代替s运算符:

sed y/ABC/BCA/ 

答案 3 :(得分:0)

我们可以通过这种方式补充好的bgg答案。只需在字符串中添加换行符即可用作XY。如果我们有这个文件:

$ cat teste.in 
ABC DEF GHI
GHI ABC DEE
DEF ABB ABCd

我们执行此sed命令:

$ sed 's/ABC/ABC\n/g 
s/DEF/DEF\n/g
s/GHI/ABC/g
s/ABC\n/DEF/g
s/DEF\n/GHI/g' teste.in
DEF GHI ABC
ABC DEF DEE
GHI ABB DEFd

由于换行不太可能出现在一行中,因此可行。 (注意我使用的是GNU sed。有些seds不能接受\n表示法。在这种情况下,只需使用反斜杠后跟实际的换行符:

$ sed 's/ABC/ABC\
/g 
s/DEF/DEF\
/g
s/GHI/ABC/g
s/ABC\
/DEF/g
s/DEF\
/GHI/g' teste.in
DEF GHI ABC
ABC DEF DEE

这应该有用。)