2016-01-19 66 views
0

我正在查看HTML文件以便於解析的目的進行修改。我需要把body中的每一項HTML分隔開來。如何使用Sed在每行中使用相同標記製作HTML內容

如我現在的HTML文件

<?xml version="1.0"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta content="text/html; charset=utf-8" http-equiv="Content-type" /> 
    <meta name="ncc:files" content="78" /> 
    </head> 
    <body> 
    <h1 class="title" id="h1"><a href="001.smil#txt4">ABOUT DAISY</a></h1> 
    <h1 class="section" id="h7"> 
     <a href="002.smil#txt10">Cover</a> 
    </h1> 
    <span class="page-normal" id="p13"> 
     <a href="002.smil#txt15">1</a> 
    </span> 
    <h1 class="section" id="h18"> 
     <a href="003.smil#txt21">Swadesaabhimaani, K. Kelappan, Muhammad Abdul Rahiman</a> 
    </h1> 
    <span class="page-normal" id="p24"> 
     <a href="003.smil#txt26">2</a> 
    </span> 
    <span class="page-normal" id="p33"> 
     <a href="003.smil#txt35">3</a> 
    </span> 
    <h1 class="section" id="h38"> 
     <a href="004.smil#txt41">Title</a> 
    </h1> 
    <span class="page-normal" id="p45"> 
     <a href="004.smil#txt47">4</a> 
    </span> 
    <h1 class="section" id="h50"> 
     <a href="005.smil#txt53">Publication</a> 
    </h1> 
    <span class="page-normal" id="p69"> 
     <a href="005.smil#txt71">5</a> 
    </span> 
    <h1 class="section" id="h74"> 
     <a href="006.smil#txt77">K. Ramakrishnapilla</a> 
    </h1> 
     </body> 
</html> 

所需的HTML後<body>標籤

<h1 class="title" id="h1"><a href="001.smil#txt4">ABOUT DAISY</a></h1> 
<h1 class="section" id="h7"><a href="002.smil#txt10">Cover</a></h1> 
<span class="page-normal" id="p13"><a href="002.smil#txt15">1</a></span> 

手段的每個標籤內容必須進來同一行沒有分裂。 請告知如何使用sed來完成。

+0

雖然可以用'sed'作爲超級高級挑戰來做到這一點,您在這裏可以更好地回顧S.O.使用'awk'設置一個標誌變量來指示''。但是,請參閱http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454。遲一些,你會遇到用'sed'或'awk'操作xml(ish)數據的問題。您需要學習一種支持xml支持的語言。祝你好運。 – shellter

回答

0

它可以這樣來完成:將所有行連接成一個,例如, tr -d '\n' INFILE > OUTFILE

然後找出其中你想有一個單獨的行,並創建一個sed腳本出來,例如像,你想<p><h1>所有的容器標籤:

#sedscript.sed 
s/<h1>/\n&/ 
s/<\/h1>/&\n/ 
s/<p>/\n&/ 
s/<\/p>/&\n/ 

然後運行它sed -f sedscript.sed OUTFILE

雖然它可能適合您的需要,但它無法處理錯誤格式的HTML(例如重疊標籤等)。

相關問題