我有一個這樣的檔案。我需要將一個特定的標簽復制到另一個標簽中,并為每個存在該標簽的部分復制。
**<Idcode>123456</Idcode>
<DrctDbtTxInf>/span>
<InstrId>XXXXXXXX</InstrId>/span>
<EndToEndId>XXXXXXXXXXXXX</EndToEndId>
<InstdAmt Ccy="EUR"/span>> XXXXXXXXXXX</InstdAmt>/span>
<MndtId>XXXXXXXXXXX</MndtId>/span>
<DtOfSgntr>XXXXXXXXXXX</DtOfSgntr>/span>
<AmdmntInd>XXXXXXXXXXXXX</AmdmntInd>
<Nm>XXXXXXXXXXX</Nm>/span>
<IBAN>XXXXXXXXXXXXXX</IBAN>
<Ustrd>XXXXXXXXXXXX</Ustrd>
</DrctDbtTxInf>/span>
<DrctDbtTxInf>/span>
<InstrId>XXXXXXXXXX</InstrId>/span>
<EndToEndId>XXXXXXXXXXXX</EndToEndId>/span>
<InstdAmt Ccy="EUR"/span>> XXXXXXXXXXXXXXX</InstdAmt>。
<MndtId>XXXXXXXXXXXX</MndtId>/span>
<DtOfSgntr>XXXXXXXXXX</DtOfSgntr>
<AmdmntInd>XXXXXXXXXXXXXXX/AmdmntInd>
<Nm>XXXXXXXXXXXXXX</Nm>
<IBAN>XXXXXXXXXXXXXXX</IBAN>/span>
<Ustrd>XXXXXXXXXXXX</Ustrd>
</DrctDbtTxInf>**。
而我將得到這樣一個結果:
***<Idcode>123456</Idcode>
<DrctDbtTxInf>/span>
<Idcode>123456</Idcode>/span>
<InstrId>XXXXXXXX</InstrId>/span>
<EndToEndId>XXXXXXXXXXXXX</EndToEndId>
<InstdAmt Ccy="EUR"/span>> XXXXXXXXXXX</InstdAmt>/span>
<MndtId>XXXXXXXXXXXXX</MndtId>
<DtOfSgntr>XXXXXXXXXXX</DtOfSgntr>/span>
<AmdmntInd>XXXXXXXXXXXXX</AmdmntInd>
<Nm>XXXXXXXXXXX</Nm>/span>
<IBAN>XXXXXXXXXXXXXX</IBAN>
<Ustrd>XXXXXXXXXXXX</Ustrd>
</DrctDbtTxInf>/span>
<DrctDbtTxInf>/span>
<Idcode>123456</Idcode>/span>
<InstrId>XXXXXXXXXXXX</InstrId>/span>
<EndToEndId>XXXXXXXXXXXX</EndToEndId>/span>
<InstdAmt Ccy="EUR"/span>> XXXXXXXXXXXXXXX</InstdAmt>。
<MndtId>XXXXXXXXXXXX</MndtId>/span>
<DtOfSgntr>XXXXXXXXXX</DtOfSgntr>
<AmdmntInd>XXXXXXXXXXXXXXX/AmdmntInd>
<Nm>XXXXXXXXXXXXXX</Nm>
<IBAN>XXXXXXXXXXXXXXX</IBAN>/span>
<Ustrd>XXXXXXXXXXXX</Ustrd>
</DrctDbtTxInf>**。
考慮到我的bash版本的限制。4.4.23(1)-release。
感謝任何幫助!
我試著搜索這樣一個主題,但搜索起來也很復雜
。
uj5u.com熱心網友回復:
如果我理解的任務是:
grep沒有什么幫助,你找到了Idcode和DrctDbtTxInf行,但之后你就很困了
粘貼一點幫助都沒有(我認為)。 粘貼是用來合并整個檔案的
我認為你只用sed就可以成功,但那是不正常的
。
我相信,使用大多數的 shell 腳本都可以,而且并不困難(如果你對 shell 腳本有研究的話)
這里有一個使用gawk(awk)的單行代碼,可能比shell的等效代碼更短:
gawk '{print}/**<Idcode>/{sub(/**/,"");I=$0}/<DrctDbtTxInf> /{print I}' < ourInputFile
- 讀取下一行& 列印它
- 如果該行與**<Idcode>相匹配,則砍掉星號并將結果命名為I 。
- 如果該行與<DrctDbtTxInf>匹配,列印I 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/307713.html
標籤:
