【问题标题】:How to find and replace text over multiple lines in Linux? [duplicate]如何在 Linux 中查找和替换多行文本? [复制]
【发布时间】:2015-11-21 01:23:49
【问题描述】:

我正在从 XML 文件中读取数据,并希望找到此属性并将值 50 替换为 45 之前:

<name>ipc.client.connect.max.retries</name> 
<value>50</value>

之后:

<name>ipc.client.connect.max.retries</name> 
<value>45</value>

我正在使用

pcregrep -M '<name>ipc.client.connect.max.retries</name>.*(\n|.)*<value>45</value>' core-site.xml  

查找字符串。

我试过了

sed 's/$string1/$string2' core-site.xml 

没用

【问题讨论】:

  • 您可以发布core-site.xml 示例文件吗?
  • 过去已经说过很多次了:不要使用正则表达式解析XML!
  • fs.defaultFShdfs://c6401.ambari.apache.org:8020fs.trash.interval360ha.failover-controller.active-standby-elector.zk.op.retries name> 120hadoop.http.authentication.simple.anonymous.allowedtruehadoop.proxyuser.hdfs.groups
  • @VivekRathod:您必须将该代码放在问题中(可以在不阅读 cmets 的情况下正确格式化和阅读),而不是在评论中。

标签: xml linux bash text replace


【解决方案1】:

你可以这样做:

sed '/<name>/{N;s/50/45/}' yourfilename

要找到标签&lt;name&gt;,然后在下一行将50 替换为45。要就地编辑使用sed -i,或备份原始sed -i.bak

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 1970-01-01
    • 2014-03-05
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2018-12-31
    • 2013-07-18
    相关资源
    最近更新 更多