Bash DON';T保持';开始';和';结束';用另一个文件的内容替换文本块时
我正在尝试将包含多个其他appender的Bash DON';T保持';开始';和';结束';用另一个文件的内容替换文本块时,bash,shell,sed,scripting,Bash,Shell,Sed,Scripting,我正在尝试将包含多个其他appender的logback.xml文件中的appender替换为仅包含所需最终appender(appender.xml)的文件中的配置 在来自的宝贵帮助下,我成功地替换了logback.xml文件中的appender.xml文本 问题是:我似乎无法改变示例来替换要替换的图案开头和结尾的线条 我的logback.xml看起来像: <appender name="Appender1" class="some.appender.class.stuff">
logback.xml
文件中的appender替换为仅包含所需最终appender(appender.xml
)的文件中的配置
在来自的宝贵帮助下,我成功地替换了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 name="THE_REPLACEMENT_APPENDER" class="BAR.appender.BAR">
<barX>${VAR_Xbar}</barX>
(...)
<barY>${VAR_Ybar}</barY>
</appender>
${VAR_1}
(...)
${VAR_2}
${VAR_Xfoo}
(...)
${VAR_Yfoo}
${VAR_A}
(...)
${VAR_B}
我的appender.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 name="THE_REPLACEMENT_APPENDER" class="BAR.appender.BAR">
<barX>${VAR_Xbar}</barX>
(...)
<barY>${VAR_Ybar}</barY>
</appender>
${VAR_Xbar}
(...)
${VAR_Ybar}
我想要的是:
<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>
${VAR_1}
(...)
${VAR_2}
${VAR_Xbar}
(...)
${VAR_Ybar}
${VAR_A}
(...)
${VAR_B}
我使用的是:
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"
CURR_XML='/path/to/logback.XML'
批量启动=“”
SUBS_FILE='/path/to/appender.xml'
大容量端=“”
cat${CURR\u XML}sed-ne/${BULK\u START}/{p;r${SUBS\u FILE}“-e”:a;n;/${BULK\u 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>
${VAR_1}
(...)
${VAR_2}
${VAR_Xbar}
(...)
${VAR_Ybar}
${VAR_A}
(...)
${VAR_B}
这是我正在使用的代码的预期输出。但我正试图摆脱那些有点像翻倍的旧式代码
有人能帮我把第一行和最后一行连同追加器的其余部分一起替换掉吗?试着省略
p每次/${BULK\u START}/{
和/${BULK\u END}/{
。当使用sed-n
时,p
命令正在打印这些行。谢谢!它工作得很好。我试图在“开始”之前和“结束”之后玩around来获取行,因为我错拿了那些p;
s作为“打印开始”和“打印结束”标记。