我正在尝试从包含多个其他appender的logback.xml
文件中替换appender,其中包含来自仅包含所需最终appender(appender.xml
)的文件的配置。
使用Replace delimited block of text in file with the contents of another file提供的宝贵帮助,我设法替换了appender.xml
文件中的logback.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>
旧线。
任何人都可以帮我替换批量的第一行和最后一行以及其余的appender吗?
答案 0 :(得分:0)
尝试在每个p;
和/${BULK_START}/ {
之后省略/${BULK_END}/ {
。使用sed -n
时,p
命令会打印这些行。