Bash:格式化HTML中的列表元素
我没有bash的经验,只是想知道如何开始 我必须编写一个bash脚本来正确格式化XHTML文档。例如:Bash:格式化HTML中的列表元素,html,bash,scripting,Html,Bash,Scripting,我没有bash的经验,只是想知道如何开始 我必须编写一个bash脚本来正确格式化XHTML文档。例如: <p>Test</p><ol><li>Test </li><li> Test</li></ol> 测试测试 试验 为此: <p>Test</p> <ol> <li>Test</li> <li>
<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
cat>format1#创建文件
#!bin/bash
如果行尾以“:(如或或)
添加\n
fi
如果线头=或
添加\n
fi
请帮助我理解它。这就是我所能想到的,我真的很想知道如何解决它。我建议您看看这个实用程序
您不必自己编写格式化程序,有很多现有的实用程序可以为您编写格式化程序,撇开它不说,这不是一项简单的任务,“如何实现html漂亮的打印格式化程序”将是一个非常广泛的问题(广泛的问题违反堆栈溢出规则)。使用
html-tidy
。如果您希望使用tidy
alias tidy="tidy -xml --indent auto --indent-spaces 1 --quiet yes -im"
上面的命令为tidy创建了一个
别名
,表示将文件缩进为xml(确保所有标记都有结束标记),使用单个空格缩进并修改文件。HTML tidy可能已经安装在您的系统上,它是为我安装的,我不记得安装过它。您可能希望通过运行-
man tidy
如果你拿到了手册,你就可以开始摇滚了
tidy -options oldFile.xhtml -output newFile.xhtml
另一种可供选择的方法是xmllint,它可能安装在您的系统上:
xmllint --format <input-file>
xmllint——格式
考虑到必须使用bash脚本解决问题,并且不能使用htmlidy的限制,我首先创建一个文件htmlidy.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将所有stdin捕获为一行文本
- sed为XHTML标记提供了前导和尾随空间
- sed在相邻的XHTML标记之间换行
- 如果一行是结束的XHTML标记(例如),awk会减少缩进
- awk打印带有缩进的行
- 如果一行是起始XHTML标记(例如 )
一旦输入的复杂性开始变得越来越复杂,这个玩具程序就会很快中断。但这会让您了解为什么使用现成的实用程序比编写自己的实用程序更好 感谢您的回复,但我实际上希望自己来做,因为我们没有安装某些东西的权限(lame)。我目前正在使用腻子。Bash在这里不是合适的工具。用python或ruby实现,这类工作有很多库
cat sexist.html | ./xhtmltidy.sh