ファイルがあります。
楽器.xml
bash-4.1$ more instrument.xml
<instr instr_id="CPT-2380950-011-001-826" valor_ch="" instr_type="CurrentAccount" instr_name="CPT-2380950-011-001-826" qn_type="1" ccy_code="GBP" cnt_code="CH" date_issue="2002-05-29 00:00:00" int_rate="0.08000000" eusd_scope="0" cmnt="CRD" status="1"/>
<instr instr_id="VAL-0000001-000" isin="0000001-000 " valor_ch="0000001-000" instr_type="Share" instr_name="******ON" qn_type="1" ccy_code="999" cnt_code="XX" int_rate="0.00000000" eusd_scope="0" cmnt="200" status="1"/>
<instr instr_id="CPT-2411550-011-000-826" valor_ch="" instr_type="CurrentAccount" instr_name="CPT-2411550-011-000-826" qn_type="1" ccy_code="GBP" cnt_code="CH" date_issue="2002-08-02 00:00:00" int_rate="0.08000000" eusd_scope="0" cmnt="CRD" status="1"/>
要件:[DateTime](例:2002-05-29 00:00:00)を[dateTtime](例:2002-05-29T00:00:00)に変更する必要があります。 --一部の行には日付がないため、日付パターンを検索して変更する必要があります。 --列の長さが異なります。 sed 13は13番目のスペースを見つけるための非常にアマチュア的な試みです(無視してください)。
私は無駄に努力した:
sed "s/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/&T/" instrument.xml
grep "[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]" test.xml | sed 's/ //13' >instrument.xml ( it doesn’t give me all )
sed "s/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/&T~+/" instrument.xml | tr "~" "\n" | sed 's/^+./+/g' ( unable to join only lines which have + in them)
ベストアンサー1
sed "s/\($(printf "[0-9][0-9]%s" '' - - '\) \(' : : '')\)/\1T\2/g"
プログラムでスキーマを構築してみてください。時には、これは非常に具体的なタイプをより簡単に識別するのに役立ちます。
上記は次のように拡張されます。
sed 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\) \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)/\1T\2/g'
(ただし一重引用符は除く)