【问题标题】:Bash: format list elements in HTMLBash:在 HTML 中格式化列表元素
【发布时间】:2015-07-16 00:13:28
【问题描述】:

我没有 bash 经验,只是想知道如何开始。

我必须编写一个正确格式化 XHTML 文档的 bash 脚本。比如变成这样:

   <p>Test</p><ol><li>Test
    </li><li>
    Test</li></ol>

进入这个:

<p>Test</p>
<ol>
  <li>Test</li>
  <li>Test</li>
</ol>

现在我相信我必须这样做:

cat > format1 #create file
#!bin/bash
if tail of a line ends with "</A-a>": (like </li> or </ol> or </p> or </ul>)
    add \n 
    fi

if head of a line = <ol> or <ul>
    add \n
    fi

请帮助我理解它。这是我能想到的,我真的很想知道如何解决它。

【问题讨论】:

  • 2. Bash 在这里不是正确的工具。用 python 或 ruby​​ 来做,有很多库可以做这种工作

标签: html bash scripting


【解决方案1】:

考虑到问题必须通过 bash 脚本解决并且不能使用 htmltidy,我将首先创建一个文件 htmltidy.sh,其中包含:

#!/bin/bash

echo $( cat )                       |\
    sed 's/\s*\(<[^>]\+>\)\s*/\1/g' |\
    sed 's/></>\n</g'               |\
    awk '{
        if ( $0 ~ /^<\/[^>]+>$/ ) indent=substr(indent,2);
        print indent$0;
        if ( $0 ~ /^<[^\/>][^>]+>$/ ) indent=indent" ";
    }'

要使用这个程序,你需要像这样将内容导入它:

cat sexist.html | ./xhtmltidy.sh

根据您提供的示例输入,这至少可以解决问题。

一些解释:

  • cat 将所有标准输入捕获为单行文本
  • sed 去除 XHTML 标记的前导和尾随空格
  • sed 在相邻的 XHTML 标记之间放置一个换行符
  • 如果一行是结束 XHTML 标记(例如 ),awk 会减少缩进
  • awk 打印带有缩进的行
  • 如果一行是起始 XHTML 标记(例如 )

一旦输入的复杂性开始变得越来越复杂,这个玩具程序就会很快崩溃。但这会让您了解为什么使用现成的实用程序而不是编写自己的实用程序更好。

【讨论】:

    【解决方案2】:

    使用html-tidy。如果您想使用tidy,最好将此添加到您的.bashrc

    alias tidy="tidy -xml --indent auto --indent-spaces 1 --quiet yes -im"
    

    上面的命令为 tidy 创建了一个alias,表示将文件缩进为 xml(确保所有标签都有结束标签),缩进一个空格并修改文件。

    【讨论】:

    • 感谢您的回复,但由于我们无权安装某些东西(蹩脚),我实际上希望自己动手。我目前正在使用腻子。
    【解决方案3】:

    我建议您查看html-tidy 实用程序。

    您不必自己编写格式化程序,有很多现有的实用程序可以为您完成这项工作,撇开这不是一项简单的任务,“如何实现 html 漂亮的打印格式化程序”将是一个真正的要问的宽泛问题(宽泛的问题违反 StackOverflow 规则)。

    【讨论】:

      【解决方案4】:

      HTML Tidy 可能已经安装在您的系统上,它是为我准备的,我不记得安装过它。你可能想通过运行来检查 -

      man tidy 
      

      如果您获得了手册,那么您就可以开始摇滚了!

      tidy -options oldFile.xhtml -output newFile.xhtml
      

      【讨论】:

        【解决方案5】:

        另一种可供研究的方法是 xmllint,它可能已安装在您的系统上:

        xmllint --format <input-file>
        

        【讨论】:

          猜你喜欢
          • 2017-02-07
          • 2015-03-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-24
          • 2020-07-16
          • 1970-01-01
          相关资源
          最近更新 更多