SED - 替换占位符之间的文本

时间:2012-12-20 12:19:31

标签: linux bash unix sed terminal

我需要你们中的一些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,所以我可能完全错了,但任何建议都会很棒。

4 个答案:

答案 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)

这应该有效:

sed -n '/#SO/,/#EO/{s/.*/REPLACEMENT/;}' file

更多详情请见link

答案 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

如果没有,请显示更具代表性的输入。