我目前正在验证客户端的HTML源代码,并且我为没有Omittag的图像和输入文件收到了很多验证错误。我会手动完成,但这个客户端实际上有数千个文件,其中很多实例都没有。
此客户端验证了一些img标签(无论出于何种原因)。
只是想知道是否有一个unix命令我可以运行检查是否没有Omittag来添加它。
我已完成简单搜索并替换为以下命令:
find . \! -path '*.svn*' -type f -exec sed -i -n '1h;1!H;${;g;s/<b>/<strong>/g;p}' {} \;
但从来没有这么大的东西。任何帮助将不胜感激。
答案 0 :(得分:4)
试试这个。它将浏览您的文件,对每个文件(perl的.orig
运算符)进行-i
备份,并将<img>
和<input>
标记替换为<img />
和<input >
。
find . \! -path '*.svn*' -type f -exec perl -pi.orig -e 's{ ( <(?:img|input)\b ([^>]*?) ) \ ?/?> }{$1\ />}sgxi' {} \;
给定输入:
<img> <img/> <img src=".."> <img src="" >
<input> <input/> <input id=".."> <input id="" >
将文件更改为:
<img /> <img /> <img src=".." /> <img src="" />
<input /> <input /> <input id=".." /> <input id="" />
以下是正则表达式的作用:
s{(<(?:img|input)\b ([^>]*?)) # capture "<img" or "<input" followed by non-">" chars
\ ?/?>} # optional space, optional slash, followed by ">"
{$1\ />}sgxi # replace with: captured text, plus " />"
答案 1 :(得分:0)
查看我在评论中提出的问题。
假设您正在使用GNU sed,并且您尝试添加跟踪/
到您的代码以符合XML <img />
和{{1然后用你的命令替换命令中的sed表达式,它应该可以解决问题:<input />
这是一个简单的测试文件(SO的着色器做了古怪的事情):
'1h;1!H;${;g;s/\(img\|input\)\( [^>]*[^/]\)>/\1\2\/>/g;p;}'
此处为GNU sed regex syntax和how the buffering works to do multiline search/replace。
或者,您可以使用Tidy之类的设计用于清理不良HTML的内容 - 如果我做的事情比一些简单的搜索/替换更复杂,那就是我要做的事情。 Tidy的选项很快变得复杂,所以通常用你选择的脚本语言(Python,Perl)编写一个脚本来调用$ cat test.html
This is an <img tag> without closing slash.
Here is an <img tag /> with closing slash.
This is an <input tag > without closing slash.
And here one <input attrib="1"
> that spans multiple lines.
Finally one <input
attrib="1" /> with closing slash.
$ sed -n '1h;1!H;${;g;s/\(img\|input\)\( [^>]*[^/]\)>/\1\2\/>/g;p;}' test.html
This is an <img tag/> without closing slash.
Here is an <img tag /> with closing slash.
This is an <input tag /> without closing slash.
And here one <input attrib="1"
/> that spans multiple lines.
Finally one <input
attrib="1" /> with closing slash.
并设置你需要的任何选项。