Grep 并粘贴到同一个文件中
Grep and paste in the same file
我有一个这样的文件。我需要将一个特定的标签复制到另一个标签中,并且对于存在该标签的每个部分。
<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.
感谢您的帮助!
我尝试搜索这样的主题,但搜索起来也很复杂
如果我理解任务:
grep 没有多大帮助,你会发现 Idcode 和 DrctDbtTxInf 行,但是你很卡住
粘贴 根本没有帮助(我认为)。粘贴用于合并整个文件
我认为你可以只使用 sed 成功,但那是有悖常理的
我相信使用大多数 shell 的 shell 脚本会起作用,而且不会那么困难(如果您正在编写 shell 脚本)
这是一个使用 gawk (awk) 的单行代码,可能比 shell 等效代码短:
gawk '{print}/**/{sub(/**/,"");I=$0}//{print I}' < ourInputFile
- 阅读下一行并打印它
- 如果该行匹配 **
,则去掉星号并命名结果 I
- 如果该行匹配
,则打印 I
我有一个这样的文件。我需要将一个特定的标签复制到另一个标签中,并且对于存在该标签的每个部分。
<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.
感谢您的帮助!
我尝试搜索这样的主题,但搜索起来也很复杂
如果我理解任务:
grep 没有多大帮助,你会发现 Idcode 和 DrctDbtTxInf 行,但是你很卡住
粘贴 根本没有帮助(我认为)。粘贴用于合并整个文件
我认为你可以只使用 sed 成功,但那是有悖常理的
我相信使用大多数 shell 的 shell 脚本会起作用,而且不会那么困难(如果您正在编写 shell 脚本)
这是一个使用 gawk (awk) 的单行代码,可能比 shell 等效代码短:
gawk '{print}/**
/{sub(/**/,"");I=$0}/ /{print I}' < ourInputFile
- 阅读下一行并打印它
- 如果该行匹配 **
,则去掉星号并命名结果 I - 如果该行匹配
,则打印 I