2017-12-19 17 views
-1

名前= "Mario Rossi"を捕まえたときにこの値を置き換える方法はありますか?内容をregex-Perl(multiline)に置き換えます

私は助けを

<PMRQ:Name>John Smith</PMRQ:Name> 
<PMRQ:PmtId>                  
<PMRQ:InstrId>95</PMRQ:InstrId>             
<PMRQ:EndToEndId>45700100523011712061901541</PMRQ:EndToEndId>     
</PMRQ:PmtId> 

<PMRQ:Name>Mario Rossi</PMRQ:Name> 
<PMRQ:PmtId>                  
<PMRQ:InstrId>94</PMRQ:InstrId>             
<PMRQ:EndToEndId>45700100522011712061901541</PMRQ:EndToEndId>     
</PMRQ:PmtId> 

感謝のために98と94を交換する必要があります!

+1

あなたの試行はどこですか?あなたは何を探検しましたか? –

+1

これはXML構造なので、PerlソリューションではなくXMLソリューションを検討することをお勧めします。私が欲しい – AntonH

+0

置き換え94 のが、ときにのみ、はマッチ "マリオ・ロッシ" – Mariano

答えて

1

例えば、xshで、必要な

open file.xml ; 
for //PMRQ:Name[.="Mario Rossi"] 
    set following-sibling::PMRQ:PmtId[1]/PMRQ:InstrId 98 ; 
save :b ; 
+0

良い答えの後に発見されたが、彼はPerlで助けを求めています。 –

+0

@EduardoLynchAraya: 'xsh'はPerlで書かれており、[XML :: LibXML](http://p3rl.org/XML::LibXML)ライブラリのラッパーです。このコードをPerlスクリプトに 'xsh'関数のパラメータとして含めることができます。 – choroba

+0

私はperlスクリプトにする必要があります、何か考えてもらえますか? – Mariano

0

これは動作しますが、余分なモジュールを作成することはできません。

$ textには、変更したい複数行のデータが含まれているものとします。それからちょうど行います。最後に

$text=~s/<PMRQ:Name>Mario Rossi<\/PMRQ:Name>\s*<PMRQ:PmtId>\s*<PMRQ:InstrId>\K\d+/98/msg; 

「G」(グローバル)修飾子は、複数の一致を実行するために必要とされている(ただし、ゼロを持っているか、いずれかが一致した場合に傷つけることはありません)。

関連する問題