【问题标题】:Grep and paste in the same filegrep 并粘贴到同一个文件中
【发布时间】:2021-09-14 15:07:57
【问题描述】:

我有一个这样的文件。我需要将特定标签复制到另一个标签中,并复制到标签所在的每个部分。

<Idcode>123456</Idcode>
<DrctDbtTxInf>
  <InstrId>XXX</InstrId>
  <EndToEndId>XXX</EndToEndId>
  <InstdAmt Ccy="EUR">XXX</InstdAmt>
  <MndtId>XXX</MndtId>
  <DtOfSgntr>XXX</DtOfSgntr>
  <AmdmntInd>XXX</AmdmntInd>
  <Nm>XXX</Nm>
  <IBAN>XXX</IBAN>
  <Ustrd>XXX</Ustrd>
</DrctDbtTxInf>
<DrctDbtTxInf>
  <InstrId>XXX</InstrId>
  <EndToEndId>XXX</EndToEndId>
  <InstdAmt Ccy="EUR">XXX</InstdAmt>
  <MndtId>XXX</MndtId>
  <DtOfSgntr>XXX</DtOfSgntr>
  <AmdmntInd>XXX</AmdmntInd>
  <Nm>XXX</Nm>
  <IBAN>XXX</IBAN>
  <Ustrd>XXX</Ustrd>
</DrctDbtTxInf>

我会得到这样的结果:

<Idcode>123456</Idcode>
<DrctDbtTxInf>
  <Idcode>123456</Idcode>
  <InstrId>XXX</InstrId>
  <EndToEndId>XXX</EndToEndId>
  <InstdAmt Ccy="EUR">XXX</InstdAmt>
  <MndtId>XXX</MndtId>
  <DtOfSgntr>XXX</DtOfSgntr>
  <AmdmntInd>XXX</AmdmntInd>
  <Nm>XXX</Nm>
  <IBAN>XXX</IBAN>
  <Ustrd>XXX</Ustrd>
</DrctDbtTxInf>
<DrctDbtTxInf>
  <Idcode>123456</Idcode>
  <InstrId>XXX</InstrId>
  <EndToEndId>XXX</EndToEndId>
  <InstdAmt Ccy="EUR">XXX</InstdAmt>
  <MndtId>XXX</MndtId>
  <DtOfSgntr>XXX</DtOfSgntr>
  <AmdmntInd>XXX</AmdmntInd>
  <Nm>XXX</Nm>
  <IBAN>XXX</IBAN>
  <Ustrd>XXX</Ustrd>
</DrctDbtTxInf>

考虑到我的 bash 版本限制:4.4.23(1)-release。

感谢您的帮助!

我试图搜索这样的主题,但搜索它也很复杂

【问题讨论】:

  • 请尝试improve your question。更具体地说明问题,并修复发布的示例缩进以提高可读性。
  • 更新问题以明确说明您要修改哪些标签以及包含哪些内容;正如目前所写的那样,我们必须向上/向下滚动数据的两个部分,试图找出发生了什么变化......不,这里没有发生......
  • 各位对不起......我会尽量清楚一点:我需要将标签 123456 放入文件 my.xml 并复制到标签 对于所有出现的 到同一个文件 my.xml...我希望现在更清楚了。谢谢

标签: xml bash grep tags synology


【解决方案1】:

如果我理解任务:

  1. grep 没有多大帮助,您会找到 IdcodeDrctDbtTxInf 行,但随后您就被卡住了

  2. 粘贴根本没有帮助(我认为)。粘贴用于合并整个文件

  3. 我认为你可以只使用 sed 就成功了,但那是不正当的

  4. 我相信使用大多数 shell 的 shell 脚本都可以工作,而且不会那么困难(如果你正在编写 shell 脚本的话)

  5. 这是一个使用 gawk (awk) 的单行代码,它可能比 shell 等价物短:

    gawk '{print}/**/{sub(/**/,"");I=$0}//{print I}'

  • 阅读下一行并打印出来
  • 如果该行匹配 **,去掉星号和命名结果 I
  • 如果该行匹配 ,则打印 I

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2012-09-24
    • 2021-09-13
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多