SED에서 패턴 후 공간 제거

SED에서 패턴 후 공간 제거

파일이 있어요

악기.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'

(그러나 작은 따옴표는 제외)

관련 정보