2011-06-10 56 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 

這應該工作)