我需要你们中的一些SED巫师给手一个菜刀....
我正在使用SED替换某些占位符之间的文本。 问题在于它们处于不同的界限(而且SED显然很讨厌)。
我需要替换的文字是'#SO'和'#EO',如下所示:
#SO
I need to replace this text
#EO
我想出了这个:
sed -ni '1h; 1!H; ${ g; s/#SO\(.*\)#EO Test/1/REPLACEMENT/ p }' foo.txt
我刚刚开始接触SED,所以我可能完全错了,但任何建议都会很棒。
答案 0 :(得分:4)
使用sed
,如下所示:
$ cat file
line 1
line 2
#SO
I need to replace this text
#EO
line 3
$ sed -n '/#SO/{p;:a;N;/#EO/!ba;s/.*\n/REPLACEMENT\n/};p' file
line 1
line 2
#SO
REPLACEMENT
#EO
line 3
工作原理:
/#SO/{ # when "#SO" is found
p # print
:a # create a label "a"
N # store the next line
/#EO/!ba # goto "a" and keep looping and storing lines until "#EO" is found
s/.*\n/REPLACEMENT\n/ # perform the replacement on the stored lines
}
p # print
答案 1 :(得分:1)
答案 2 :(得分:0)
您可以使用模式指定要处理的sed的行范围 见http://www.grymoire.com/Unix/Sed.html#uh-29
sed -n '/#SO/,/#EO/ s/.*/changed/' file
答案 3 :(得分:0)
这就是你想要的:
$ cat file
#SO
I need to replace this text
#EO
$ awk '/#EO/{f=0} {print f ? "replacement text" : $0} /#SO/{f=1}' file
#SO
replacement text
#EO
如果没有,请显示更具代表性的输入。