【发布时间】:2017-12-14 08:18:51
【问题描述】:
我正在尝试将包含其他几个附加程序的 logback.xml 文件中的附加程序替换为仅包含所需最终附加程序 (appender.xml) 的文件中的配置。
在Replace delimited block of text in file with the contents of another file 的宝贵帮助下,我设法替换了logback.xml 文件中的appender.xml 文本。
问题是:我似乎无法更改示例来替换要替换的模式的开始和结束行。
我的 logback.xml 看起来像:
<appender name="Appender1" class="some.appender.class.stuff">
<foo1>${VAR_1}</foo1>
(...)
<foo2>${VAR_2}</foo2>
</appender>
<appender name="THE_APPENDER_TO_BE_REPLACED" class="FOO.appender.FOO">
<fooX>${VAR_Xfoo}</fooX>
(...)
<fooY>${VAR_Yfoo}</fooY>
</appender>
<appender name="Appender3" class="some.appender.class.stuff">
<fooA>${VAR_A}</fooA>
(...)
<fooB>${VAR_B}</fooB>
</appender>
我的 appender.xml 看起来像:
<appender name="THE_REPLACEMENT_APPENDER" class="BAR.appender.BAR">
<barX>${VAR_Xbar}</barX>
(...)
<barY>${VAR_Ybar}</barY>
</appender>
我想得到什么:
<appender name="Appender1" class="some.appender.class.stuff">
<foo1>${VAR_1}</foo1>
(...)
<foo2>${VAR_2}</foo2>
</appender>
<appender name="THE_REPLACEMENT_APPENDER" class="BAR.appender.BAR">
<barX>${VAR_Xbar}</barX>
(...)
<barY>${VAR_Ybar}</barY>
</appender>
<appender name="Appender3" class="some.appender.class.stuff">
<fooA>${VAR_A}</fooA>
(...)
<fooB>${VAR_B}</fooB>
</appender>
我正在使用什么:
CURR_XML='/path/to/logback.xml'
BULK_START='<appender name="THE_APPENDER_TO_BE_REPLACED" class="FOO.appender.FOO">'
SUBS_FILE='/path/to/appender.xml'
BULK_END='<\/appender>'
cat ${CURR_XML} | sed -ne "/${BULK_START}/ {p; r ${SUBS_FILE}" -e ":a; n; /${BULK_END}/ {p; b}; ba}; p"
我得到了什么:
<appender name="Appender1" class="some.appender.class.stuff">
<foo1>${VAR_1}</foo1>
(...)
<foo2>${VAR_2}</foo2>
</appender>
<appender name="THE_APPENDER_TO_BE_REPLACED" class="FOO.appender.FOO">
<appender name="THE_REPLACEMENT_APPENDER" class="BAR.appender.BAR">
<barX>${VAR_Xbar}</barX>
(...)
<barY>${VAR_Ybar}</barY>
</appender>
</appender>
<appender name="Appender3" class="some.appender.class.stuff">
<fooA>${VAR_A}</fooA>
(...)
<fooB>${VAR_B}</fooB>
</appender>
这是我正在使用的代码的预期输出。但我正试图摆脱 <appender FOO stuff> </appender> 旧行,它们会翻倍。
谁能帮我把第一行和最后一行连同附加程序的其余部分一起替换掉?
【问题讨论】: