如何使用Sed在每行中使用相同的标记生成HTML内容

如何使用Sed在每行中使用相同的标记生成HTML内容,sed,Sed,我正在寻找一个HTML文件进行修改,以便于解析。我需要把每个项目的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"

我正在寻找一个HTML文件进行修改,以便于解析。我需要把每个项目的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是

<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

执行此操作,方法如下:将所有行合并为一行,例如使用
tr-d'\n'infle>OUTFILE

然后在单独的一行中找出您想要的所有容器标记,并从中创建一个sed脚本,例如,您想要

#sedscript.sed
s/\n&/
s/&\n/
s//\n&/
s/&\n/
然后使用
sed-f sedscript.sed OUTFILE运行它


虽然它可能适合您的需要,但它不能处理格式错误的HTML(例如重叠标记等)

虽然可以将
sed
作为一项超级高级挑战来完成这项任务,但您最好在S.O.上查看答案,使用
awk
设置标志变量以指示“内部”。但是,你看。您迟早会遇到操作xml(ish)数据的
sed
awk
问题。您需要学习一种具有xml支持的语言。祝你好运
#sedscript.sed
s/<h1>/\n&/
s/<\/h1>/&\n/
s/<p>/\n&/
s/<\/p>/&\n/