2014-10-14 2 views
-1

메신저는 다음과 같은 태그 사이에 문자열 오리지널을 대체하려고 :검색 XML 태그 사이의 귀갑과 교체 부품

...<Cell><Data ss:Type="String">some text hmtl encoded and multiline 
e.g <br /><strong>title:</strong></Data>.. ..next 
element.....<Cell><Data ss:Type="String">some text hmtl encoded and 
multiline e.g <br /><strong>title2:</strong></Data>.. 

출력 : 내가 seach해야

...<Cell><Data ss:Type="String">some text hmtl encoded and multiline 
e.g &amp;lt;br /&amp;gt;&amp;lt;strong&amp;gt;title:&amp;lt;/strong&amp;gt;</Data>.. ..next 
element.....<Cell><Data ss:Type="String">some text hmtl encoded and 
multiline e.g &amp;lt;br /&amp;gt;&amp;lt;strong&amp;gt;title2:&amp;lt;/strong></Data>.. 

"<"또는 ">"인 모든 요소에 대해 "&amp;lt;"또는 "&amp;gt;"으로 바꿉니다. "<Data ss:Type="String">"과 "</Data>"사이에 있습니다. 패턴에는 여러 줄 검색이 포함되어야합니다. "<Data.."은 줄의 시작 부분에 없으며 "</Data>"은 줄의 끝에 없습니다 형식은 일반적으로 문자열이지만 다른 형식 일 수도 있습니다.

은 내가

awk '/<Data>.*<\/Data>/{sub("<","&amp;lt;",$0)} 1' $sourcefile | 
awk '/<Data>.*<\/Data>/{sub(">","&amp;gt;",$0)} 1' >$outputfile 

으로 시도하지만 찾기/올바른 방법으로 그것을 대체하지 않습니다.

사람이 해결 방법을 알고 있습니까? !

+0

BEGINORS=""을 설정하지 않으려면

<Cell> <Data ss:Type="String">some text hmtl encoded and multiline e.g &amp;lt;br /&amp;gt;&amp;lt;strong&amp;gt;title:&amp;lt;/strong&amp;gt;</Data>.. ..next element.....<Cell> <Data ss:Type="String">some text hmtl encoded and multiline e.g &amp;lt;br /&amp;gt;&amp;lt;strong&amp;gt;title2:&amp;lt;/strong&amp;gt;</Data> 

당신은이 작업을 수행하는 듀얼 정규식이 필요합니다. 하나는 내용물을 잡고, 다른 하나는 내용물을 대체합니다. – sln

답변

1
awk 'BEGIN{RS="<Data"} NR==1{print} NR>1{x=match($0,/>/);y=match($0,/<\/Data/);s=substr($0,x+1,y-x-1); gsub(/</,"\&amp;lt;",s);gsub(/>/,"\&amp;gt;",s);print RS substr($0,0,x) s substr($0,y)}' file 

OUTPUT : 당신은 줄 바꿈 다음

+0

thx @WYSIWYG! 무언가로 교체하는 대신 문자열의 부분을 검색하고()을 '& lt;'또는 '& gt;' – Roland

+0

@Roland로 바꿀 필요가 있습니다. Ohh가 잘못 편집했습니다. – WYSIWYG

+0

안녕하세요. 명령은 완벽합니다. 나는 다음 명령어 'sed -e's/> gt/amp; gt/g'> $ outputfile'thx! – Roland