【问题标题】:Using sed to replace a part of multine text使用 sed 替换多行文本的一部分
【发布时间】:2022-08-13 22:25:20
【问题描述】:

我试图使用这个 sed 命令将no 部分从下面的文本切换到yes,但似乎没有弄清楚。任何帮助将不胜感激!

命令:sed -E \"s@<wodle name=\"docker-listener\">\\n\\s+<disabled>(no)<\\/disabled>@yes@g\" /etc/test.txt

test.txt 中的文本

<wodle name=\"docker-listener\">
    <disabled>no</disabled>
</wodle>

<wodle name=\"example\">
    <disabled>no</disabled>
</wodle>

更新:我现在使用下面的命令处于更好的状态,但问题是即使 sed 没有找到匹配项,我仍然得到0 的返回码,而不是定义的100。任何线索如何解决这个问题?

sed -E \"N;!{q100};s@&lt;wodle name=\\\"docker-listener\\\"&gt;\\n\\s+&lt;disabled&gt;no@&lt;wodle name=\\\"docker-listener\\\"&gt;\\n &lt;disabled&gt;yes@g\"

  • Don\'t Parse XML/HTML With Regex.。我建议使用 XML/HTML 解析器(xmlstarlet、xmllint ...)。
  • sed 通常在单行上工作,因此嵌入的\\nwon\'t match 除非您告诉 sed 将多行读入模式空间
  • sed \'/<禁用>/s/no/yes/\'

标签: linux sed


【解决方案1】:

sed '/<disabled>/ s/no/yes/' 
sed 'H;1h;$!d;x;s@\(<wodle name="docker-listener">\n[ ]*<disabled>\)no\(</disabled>\)@\1yes\2@'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-07
    • 2020-02-27
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    相关资源
    最近更新 更多