【问题标题】:about use sed Modify the file?关于使用 sed 修改文件?
【发布时间】:2014-08-13 10:10:59
【问题描述】:

我有一个关于使用 sed 修改文件的问题。我的文件内容:

<data-value name="WLS_INSTALL_DIR" value="/home/Oracle/wlserver_10.3">

我要替换字段value="/home/Oracle/wlserver_10.3"的内容

要得到这个结果:

<data-value name="WLS_INSTALL_DIR" value="/u03/Middle_home/Oracle/wlserver_10.3">

我用sed

sed "6 i/^value=/>/s/value=  />\(.*\)/value=\"\/u03\/Oracle/Middleware/wlserver_10.3"\" \/\  /u03/silent.xml

【问题讨论】:

标签: sed


【解决方案1】:

您的sed 脚本存在许多问题。

首先,任何看起来像6istuff 的东西都会简单地将i ("insert") 之后的所有内容逐字写入第六行之前的新行。 (有些方言需要在i 之后换行,基本上什么都不做。)

其次,^value= 与您的输入不匹配;它只会选择以字符串 value= 开头的行(^ 元字符表示行首)。

第三,替换正则表达式中的 /&gt; 终止替换,因此从 &gt; 开始的所有内容都被解析为替换的无效标志。无论如何,我看不到这部分的目的;它与您的数据不匹配,因此正则表达式失败。

删除所有这些多余和错误的细节后,剩下的就是一个或多或少有用的sed 脚本。 (我认为6 只处理输入的第六行是故意的,尽管您根本没有在问题中提到这一点。)我做了一些额外的小改进,例如使用% 作为替换分隔符并收紧正则表达式,使其只替换双引号值。

sed '6s%value="[^"]*"%value="/u03/Oracle/Middleware/wlserver_10.3"%'  /u03/silent.xml

6 更好的方法可能是用/name="WLS_INSTALL_DIR"/ 识别行。

不过,正如评论中提到的,操作 XML 的正确方法是使用专用工具,例如 xsltproc

【讨论】:

    【解决方案2】:

    试试:

    sed 's|/home|/u03/Middle_home|'
    

    【讨论】:

      猜你喜欢
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2011-01-10
      相关资源
      最近更新 更多