2013-08-12 3 views
0

XML 파일이 거의없고 요소 태그 또는 텍스트 태그와 같이 중간에 여분의 공백이 추가 된 사용자가 있으며 여러 파일 버전을 비교하는 것이 매우 어려워졌습니다.sed : 텍스트 중간에서 공백 제거

예는 첫 번째 책 요소의 예제 코드, 저자의 요소 태그와 제목의 텍스트 노드 이상에서 볼 수 있듯이 (XML 파일)

<?xml version="1.0"?> 
<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author > 
     <title>XML Developer's Guide  </title> 
     <genre>Computer</genre> 
     <price>44.95</price> 
     <publish_date>2000-10-01</publish_date> 
     <description>An in-depth look at creating applications 
     with XML.</description> 
    </book> 
    <book id="bk102"  > 
     <author>Ralls, Kim</author> 
     <title>Midnight Rain</title> 
     <genre>Fantasy</genre> 
     <price>5.95</price> 
     <publish_date>2000-12-16</publish_date> 
     <description>A former architect battles corporate zombies, 
     an evil sorceress, and her own childhood to become queen 
     of the world.</description> 
    </book> 
</catalog> 

여분의 공간을 가지고있다. 마찬가지로 두 번째 책 요소의 요소 태그에는 여분의 공백이 있습니다.

정규 표현식에서 이러한 유형의 공백 (둘 이상의 인접 공백)을 검색하려고하지만 앞의 공백을 원하지 않습니다. 선행 공백 (선 시작)을 떠나지 않고 단일 공백으로 바꾸면 들여 쓰기가 손실됩니다.

처음에는 모든 double + 공백을 제거하고 파일에 xmllint --format을 수행하는 것과 같은 방법으로 처리 할 수 ​​있지만 누군가가 나에게 공백에 대해 reg exp를 줄 수 있다면 도움이 될 것입니다. 윤곽.

나는 ^, \ s와^\ s의 조합을 시도했지만 해결책을 얻지 못하는 것 같습니다. 누군가가 제안 할 수 있다면 정말 도움이 될 것입니다. 이것은 (나오지 GNU)을 당신을 위해 작동 할 수

+0

당신이 정말로 알고 있든 없든, 적절한 XML 구문 분석/처리 도구 세트이며 일반 표현 엔진이 아닙니다 ... – twalberg

답변

2

(. 텍스트 노드의 여러 공간은 우리의 프로젝트의 디자인에 따라 잘못된 값은 그래서 그 어떤 부정적인 영향을 발생하지 않습니다 제거) :

sed -r 's/(\S)\s+([<>])/\1\2/g' file 

이를 찾습니다 비 공백 다음에 하나 이상의 공백이오고 뒤에 < 또는 >이오고 공백이 하나 이상 제거됩니다.

+0

와우 ... 매력처럼 작동합니다. 정규식은 너무 복잡합니다. 당신은 그들을 무너 뜨리고 이해합니다. 고마워 (미안, 내가 15 명의 담당자가 필요한만큼 upvote 할 수 없다) – Asheesh