我是网络抓取有线电视调制解调器的HTML诊断页面源代码使用外壳脚本,我需要修复一些编码错误,这是由摩托罗拉做的。在许多页面中,有一些地方缺少输入标记末尾的结束>,这有点破坏了内容。因为</td>之前的值是动态的,所以我需要能够动态地修复标记。
示例字符串:<td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253 </td>
看看它是如何以value=253 </td>结尾的
如何才能在整个页面中每次出现时都用">“替换空格?请记住,在其他地方,这些页面中的</td>前面会有一个空格,因此sed 's/ <\/td>/><\/td>/g'将无法正常工作。
谢谢你的帮忙
发布于 2016-01-08 02:50:57
虽然它不是格式良好的HTML,但它不应该破坏您的工具-如果您使用的是正确的工具。
要解析HTML,您需要使用DOM解析器。我建议和它一起使用XPath。在Linux上,您可以从命令行使用libxml2-utils包中的xmllint。通过libxml2 (Linux上的公共xml库)可用的DOM解析器可以解析上述无效输入。
假设您想提取输入值:
xmllint --html --xpath '//input[@name="NumberOfCpes"]/@value' test.html它报告一个超文本标记语言解析错误,您可以将该错误重定向到/dev/null
xmllint --html --xpath '//input[@name="NumberOfCpes"]/@value' test.html 2>/dev/null但仍然会在stdout上给出正确的值:
value="253"然而,当然令人恼火的是,该站点会生成无效的HTML。
发布于 2016-01-08 06:14:57
使用sed的正则表达式和替换方法
sed -r 's#(<input[^>]+)[[:space:]]*<#\1>#g;s#[[:space:]]+([>])#\1#g'如果你有下面的例子
<td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253 </td>您的输出将是
<td bgcolor=#E7DAAC width=138 colspan=2><input type="text" name="NumberOfCpes" size="3" maxlength="3" value=253>/td>`https://stackoverflow.com/questions/34662569
复制相似问题