XML 파일에서 전자 메일 주소의 공백을 반복적으로 찾아 바꾸기

XML 파일에서 전자 메일 주소의 공백을 반복적으로 찾아 바꾸기

기존 환경을 새 환경으로 마이그레이션하고 있습니다. 이전 환경에서는 이메일 주소의 시작이나 끝에 공백이 있을 수 있습니다. 그러나 새로운 환경에서는 이것이 허용되지 않습니다.

예시 파일:

<PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe"> <ID><![CDATA[jdoe]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe ]]></LASTNAME> <NAME><![CDATA[John Doe]]></NAME> <FIRSTNAME><![CDATA[John ]]></FIRSTNAME> <EMAIL><![CDATA[[email protected] ]]></EMAIL> </PEOPLE>

여기에서 xml 태그가 있는 것을 볼 수 있습니다. LASTNAME, FIRSTNAME, EMAIL 태그에 공백이 있는 경우가 있습니다. 그러나 이름 태그 "John Doe"와 같이 이름 사이에 공백이 있는 것을 원하지 않습니다. 나는 그것을 그대로 유지하고 싶다.

파일의 특정 태그 이름 뒤의 공백을 제거하고 파일을 해당 위치에 저장하거나 다른 파일에 복사하려면 어떻게 해야 합니까?

원하는 결과:

<PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe"> <ID><![CDATA[jdoe]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe]]></LASTNAME> <NAME><![CDATA[John Doe]]></NAME> <FIRSTNAME><![CDATA[John]]></FIRSTNAME> <EMAIL><![CDATA[[email protected]]]></EMAIL> </PEOPLE> <PEOPLE objectclass="[objPeople, objlwsnRMResource, top]" id="jdoe2"> <ID><![CDATA[jdoe2]]></ID> <ALLOWJOBQUEUE><![CDATA[N]]></ALLOWJOBQUEUE> <GROUP><![CDATA[ESS Employee]]></GROUP> <LASTNAME><![CDATA[Doe]]></LASTNAME> <NAME><![CDATA[Jane Doe]]></NAME> <FIRSTNAME><![CDATA[Jane]]></FIRSTNAME> <EMAIL><![CDATA[[email protected]]]></EMAIL> </PEOPLE>

이런 일을 한 사람이 있습니까?

답변1

sed다음을 사용하여 시퀀스 앞의 공백을 제거 할 수 있습니다 ]].

sed 's/ *]]/]]/g' file.xml

여기서 정규식 " "은 리터럴 " "이 뒤에 오는 0개 이상의 *]]공백(" ")(" ")과 일치합니다 . 그런 다음 일치하는 항목은 " "로 대체됩니다 . 결과 쓰기*]]]]표준 출력, 적절한 방법으로 리디렉션할 수 있습니다.

적합한 버전이 있는 경우 " " 대신 " "을 사용하여 표시하도록 sed선택할 수 있습니다.\s공백 문자(즉, 공백뿐만 아니라 탭 및 기타 인쇄할 수 없는 문자도 포함됩니다)

관련 정보