2011-06-10 57 views
1

在我的文件input.txt中,我想替换A-> B,B-> C和C->一 即我想要运行sed的圆形替代

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

不过,我不如果我运行上面的sed脚本,A不变A-> B-> C-> A,B转到A(B-> C-> A)

有没有办法做我想要的替代品?

感谢

+0

什么是A,B和C正好?字符或字符串? – ssapkota 2011-06-11 19:41:44

回答

2

有可能是一个更好的办法,但如果有适合的X和Y不是在你的input.txt中,你可以尝试:

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

我会使用trtr 'ABC' 'BCA'

+1

我不确定OP字面意思是A,B或C字符。更可能是字符串。 – mouviciel 2011-06-10 13:01:25

+0

@ mouviciel:是的,在第二次阅读后,我认为你是对的。但我一直在回答。 – Toto 2011-06-10 13:13:01

0

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

 
sed y/ABC/BCA/ 
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 

这应该工作)