在我的文件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)
有没有办法进行我想要的替换?
由于
答案 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)
我使用tr
:tr 'ABC' 'BCA'
答案 2 :(得分:0)
使用y运算符代替s运算符:
sed y/ABC/BCA/
答案 3 :(得分:0)
我们可以通过这种方式补充好的bgg答案。只需在字符串中添加换行符即可用作X
或Y
。如果我们有这个文件:
$ 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
这应该有用。)