1

我需要你们中的一些 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

4 回答 4

6

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
于 2012-12-20T12:31:18.023 回答
1

这应该有效:

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

更多详细信息请参见此链接

于 2014-06-18T06:34:10.933 回答
0

您可以使用模式来指定 sed 可以处理的行范围。
http://www.grymoire.com/Unix/Sed.html#uh-29

sed -n '/#SO/,/#EO/ s/.*/changed/' file
于 2012-12-20T12:31:13.267 回答
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

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

于 2012-12-20T14:00:55.420 回答