【问题标题】:shell script copy from one file and paste on another fileshell脚本从一个文件复制并粘贴到另一个文件
【发布时间】:2014-02-21 10:23:42
【问题描述】:

我想从一个文件中复制一些行并将其粘贴到另一个文件的特定位置 使用 shell 脚本定位

例如:我想将行中带有字符串"name2""inst" 并在字符串name2 之后以</inst> 结尾的行从file1.xml 复制到file2.xml

在 file2.xml 中粘贴行的位置是包含文本“clipKTP”的行之前。

file1.xml

    <Manufacturer clause >
        <inst abtz "nameABC">  //Inst nameABC
            <pressure 100> </pressure>
            <temp 50> </temp>
        </inst>
        <inst abtz "name2">  //Inst name2
            <pressure 100> </pressure>
            <temp 50> </temp>
        </inst>
        <inst abtz "name5678">  //Inst name5678
            <pressure 100> </pressure>
            <temp 50> </temp>
        </inst>
    </Manufacturer>

file2.xml

    <Measure> atk
        <inst abtz "name1">  // Inst name1
            <pressure 100></pressure>
            <temp 50></temp>
        </inst>
        <clipton> "clipKTP"
            <slave slvgo > </slave>
        </clipton>
    </Measure>

结果file2.xml 应该是这样的

    <Measure> atk
        <inst abtz "name1">  // Inst name1
            <pressure 100></pressure>
            <temp 50></temp>
        </inst>
        <inst abtz "name2">  //Inst name2
            <pressure 100></pressure>
            <temp 50></temp>
        </inst>
        <clipton "clipKTP">
            <slave slvgo > </slave>
        </clipton>
    </Measure>

【问题讨论】:

  • 到目前为止你做了什么?
  • 您可以在编辑器中执行此操作吗?是你需要在 shell 中执行此操作的原因吗,因为您会重复执行此操作?如果有,情况如何?我可以想到一个 awk 脚本,但需要更多信息来帮助。
  • 我的第一个想法是使用适当的 XML 解析器,但遗憾的是您的 xml 无效。

标签: xml shell sh


【解决方案1】:

您可以使用sedawk 轻松提取有趣的部分,并使用sedawk 将其插入到正确的位置。

 excerpt=$(sed -n -e '/name2/,/<\/inst>/p' file1.xml)
 awk -v excerpt="$excerpt" '
   printed == 0 && /clipton/ {
     print(excerpt);
     print($0); printed = 1
 }' < file2.xml > file2-result.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 2013-11-01
    • 2021-04-14
    • 2021-06-29
    相关资源
    最近更新 更多