我试图替换以下标记之间的字符串 的原稿:
...<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>..
输出:
...<Cell><Data ss:Type="String">some text hmtl encoded and multiline
e.g &lt;br /&gt;&lt;strong&gt;title:&lt;/strong&gt;</Data>.. ..next
element.....<Cell><Data ss:Type="String">some text hmtl encoded and
multiline e.g &lt;br /&gt;&lt;strong&gt;title2:&lt;/strong></Data>..
我必须使用&#34; <
&#34;来搜索所有元素。或&#34; >
&#34;并将其替换为&#34; &lt;
&#34;或&#34; &gt;
&#34;,但仅限于&#34; <Data ss:Type="String">
&#34;和&#34; </Data>
&#34;。模式必须包括多行搜索。
&#34; <Data..
&#34;不是在行的开头和&#34; </Data>
&#34;不在最后
Type通常是字符串,但它可以是另一种类型。
我试过
awk '/<Data>.*<\/Data>/{sub("<","&lt;",$0)} 1' $sourcefile |
awk '/<Data>.*<\/Data>/{sub(">","&gt;",$0)} 1' >$outputfile
但它没有以正确的方式找到/替换它。
有人知道如何解决它? THX!
答案 0 :(得分: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(/</,"\&lt;",s);gsub(/>/,"\&gt;",s);print RS substr($0,0,x) s substr($0,y)}' file
输出:
<Cell>
<Data ss:Type="String">some text hmtl encoded and multiline
e.g &lt;br /&gt;&lt;strong&gt;title:&lt;/strong&gt;</Data>.. ..next
element.....<Cell>
<Data ss:Type="String">some text hmtl encoded and
multiline e.g &lt;br /&gt;&lt;strong&gt;title2:&lt;/strong&gt;</Data>
如果您不想换行,请在ORS=""
BEGIN