![](/img/trans.png)
[英]How to extract contents of <tr> tags from html document using regex?
[英]How to extract specific meta information from html document using Regex
我需要使用Linux命令从html文档中提取特定的元信息。
例如:具有
<meta content="2017-12-26" name="lastmod"/>
我需要从此元标记中提取2017-12-26
。
我在“测试”文件夹中设置了一篇文章,我正在反复获取标题和元信息。
我可以获取标题,但不能获取元标题。
我正在尝试的代码
DOC_FOLDER_PATH=test"/"
for i in `find $DOC_FOLDER_PATH -type f -name "*.htm*"`
do
title_to_get=$(grep "<title>" $i | tail -1)
title_to_get=$(echo $title_to_get | sed 's/<title>//g' | sed 's/<\/title>//g')
echo "Title: "$title_to_get
last_modify_date=$(grep "<meta name='lastmod' $i | tail -1)
last_modify_date=$(echo $last_modify_date | sed 's/<meta//g' | sed 's/<\">>//g')
echo 'content'$last_modify_date
done
我正在获取title_to_get
但没有得到last_modify_date
。 我如何获得last_modify_date
?
我希望我能解决这个问题。 请帮我。
meta标签中内容和名称的顺序是免费的,但是您的表达式希望( <meta name='lastmod'
)lastmod在第一位,而在第二位:
<meta content="2017-12-26" name="lastmod"/>
使用sed,您可以查看lastmod是否存在,然后选择content-content:
echo '<meta content="2017-12-26" name="lastmod"/>'| sed -rn "/<meta .*name=.lastmod./ s/.*content=.([0-9-]+).*/\1/p"
2017-12-26
所以你的代码
last_modify_date=$(grep "<meta name='lastmod' $i | tail -1)
last_modify_date=$(echo $last_modify_date | sed 's/<meta//g' | sed 's/<\">>//g')
可以提高到
last_modify_date=$(sed -rn "/<meta .*name=.lastmod./ s/.*content=.([0-9-]+).*/\1/p" "$i")
有一些陷阱要提:
也许下次该日期写为2017/12/26。 或者可能是以经典的大陆形式2017年12月26日。 或数不胜数的其他格式之一。
模式“。([[0-9-] +)。*”不可用于单引号或双引号,并且可以完美地工作。 但是您可以对有效字符进行分组,并使用[“']进一步限制错误可能性content=2017-12-26
,但是我不知道确切如何屏蔽这些字符,因此您必须尝试一下。
换行符注定了:
<meta content="2017-12-26"
name="lastmod"/>
还有评论:
<!-- that's not longer valid:
<meta content="2017-12-26"
name="lastmod"/>
-->
但通常只要检查一下结果就足够了,例如“恰好找到一个lastmod日期,并对输入格式的更改做出反应。
大多数html页面不完全符合标准,因此使用xml解析器也可能不起作用。 但是看看xmlstarlet,如何解析xml。 通常,它非常有用,也可能有助于解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.