2014-12-19 14 views
5

Ho prossimo file xml:Sed ottenere xml valore di attributo

<AutoTest> 
<Source>EBS FX</Source> 
<CreateCFF>No</CreateCFF> 
<FoXML descriptor="pb.fx.spotfwd.trade.feed" version="2.0"> 
    <FxSpotFwdTradeFeed> 
    <FxSpotFwd feed_datetime="17-Dec-2014 10:20:09" 
     cpty_sds_id="EBS" match_id="L845586141217" original_trade_id_feed="L80107141217" 
     value_date="20141218" trade_id_external="001-002141880445/5862" match_sds_id="EBSFeedCpty" 
     counter_ccy="USD" trade_id_feed="107" trade_type="S" feed_source_id="80" quoting_term="M" 
     deal_ccy="GBP" rate="1.5" trade_date="20141217" modified_by="automation" cpty_side="B" counter_amt="1500000" 
     smart_match="0" booking_status_id="10" trade_status_id="22" deal_amt="1000000" trade_direction="B"> 
     <Notes /> 
    </FxSpotFwd> 
</FxSpotFwdTradeFeed> 
<TestCases /> 
</FoXML> 
</AutoTest> 

Come ottenere valore trade_id_external attributo utilizzando sed?
Ho provato con questa espressione: sed -n '/trade_id_external/s/.*=//p' ./file.xml ma senza fortuna

risposta

12

non hanno nemmeno bisogno di un modello /trade_id_external/ prima della s///

$ sed -n 's/.*trade_id_external="\([^"]*\).*/\1/p' file 
001-002141880445/5862 

In base sed, \(...\) chiamati gruppi di cattura che è stato utilizzato per catturare il personaggi che vuoi stampare alla finale.

Attraverso grep,

$ grep -oP 'trade_id_external="\K[^"]*' file 
001-002141880445/5862 

-P sarebbe attivare la modalità Perl regex in grep. Quindi potremmo usare qualsiasi regex di PCRE in grep con il parametro -P abilitato. \K nella regex precedente eliminerebbe i caratteri precedentemente abbinati, cioè non considererà i caratteri che sono abbinati dal modello esistente prima dello \K

+0

Grazie mille! Per me funziona. – Iurii

Problemi correlati