正在寻找一种使用终端命令修剪HTML代码的方法
我试图更好地学习正在寻找一种使用终端命令修剪HTML代码的方法,html,string,parsing,sed,awk,Html,String,Parsing,Sed,Awk,我试图更好地学习awk和sed,以便能够创建跨兼容的终端工具,而不需要像PHP、Perl之类的东西。我现在试图清理一个很长的字符串,它基本上是我用curl获取的HTML文档的一部分。我想知道最好的办法是什么 我发现的大多数解决方案都依赖于诸如静态文件或结构之类的奢侈品,但当我试图清理获取的HTML代码时,我希望能够假设字符串的“外围”可以在大小和结构上发生很大变化。因此,我认为我需要能够做的基本上是识别HTML标记,因为这些标记可能不会改变,并从这些HTML标记中提取数据,无论它们在哪里。例如:
awk
和sed
,以便能够创建跨兼容的终端工具,而不需要像PHP、Perl之类的东西。我现在试图清理一个很长的字符串,它基本上是我用curl
获取的HTML文档的一部分。我想知道最好的办法是什么
我发现的大多数解决方案都依赖于诸如静态文件或结构之类的奢侈品,但当我试图清理获取的HTML代码时,我希望能够假设字符串的“外围”可以在大小和结构上发生很大变化。因此,我认为我需要能够做的基本上是识别HTML标记,因为这些标记可能不会改变,并从这些HTML标记中提取数据,无论它们在哪里。例如:
有效负载
我需要能够查找整个HTML标记,当它被找到时,我需要提取
之后的基本内容,直到您很可能需要使用Regex来查找所需的字符串段,sed
和awk
将Regex作为一个选项,尽管可能需要一个开关来完成。我建议您将标记作为整体进行查找,否则您可能最终会在结束标记和开始标记之间获得代码(这里的stuff
),这可能是您不想要的
因此,您的正则表达式最基本的外观可能是这样的(未经测试,您可能需要对其进行调整):
/\//*查找开始标记。*/
/\//*找到结束标记,注意方括号内是否存在“/”。
*/
根据您的需要,您可以创建一个要查找的标记列表,具体来说,提供如下内容:
tags="div|p|article|section" /* Your list of tags, pipe-delimited for OR logic */
/\<$tags[:print:]\>/ /* The regex, looking for something like <div[anything]> */
tags=“div | p | article | section”/*您的标记列表,以管道或逻辑分隔*/
/\//*正则表达式,寻找类似*/
通过重新设置开始标记,将基本标记存储在一个变量中,然后找到匹配的结束标记,您可以进一步了解它。这可能需要更多的工作才能正常工作,但它的优点是更健壮,自然避免了在错误的结束标记处停止的陷阱(即,当它应该在
处停止时,在
处停止)
几个注意事项-这可能会有点毛茸茸的一些单字符标记。如果您编写的程序不够智能,那么您的程序可能会混淆
和
之类的内容,因此请确保您的代码足够健壮,足以说明这一点
另外,不要忘记,
用于生成大多数不同的表单输入,因此如果您关心这些是什么,请确保在遇到
时查找类型
属性
最后,您不必假定一个标记将有一个结束标记。有些标记没有(
/
,
/
),HTML规范并不总是需要它们(
和
不需要关闭标记,只要下一个打开标记是另一个或,或紧跟着家长的关闭标记)。你也不能假设你得到的HTML是有效的。因此,请确保考虑到这些情况,以便您的应用程序不会崩溃和烧坏。您不想为此使用sed
或awk
。看看[x]html解析,尝试使用regexp进行解析是错误的方法,它可以感谢@sudo_O的链接,我现在意识到为什么我在使用它时遇到这样的问题:)根据上面的评论,我现在已经开始(尝试)学习Perl。谢谢:)
tags="div|p|article|section" /* Your list of tags, pipe-delimited for OR logic */
/\<$tags[:print:]\>/ /* The regex, looking for something like <div[anything]> */