Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash DON';T保持';开始';和';结束';用另一个文件的内容替换文本块时_Bash_Shell_Sed_Scripting - Fatal编程技术网

Bash DON';T保持';开始';和';结束';用另一个文件的内容替换文本块时

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">

我正在尝试将包含多个其他appender的
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作为“打印开始”和“打印结束”标记。