是否可以使用 grep 清理 HTML 文件以提取某些字符串?
Is it possible to clean up an HTML file with grep to extract certain strings?
我参与了一个网站,我想每天从该网站获取信息。该页面如下所示:
User1 added User2.
User40 added user3.
User13 added user71
User47 added user461
等等..
没有 JSON 端点来获取信息并对其进行解析。所以我必须 wget
页面并清理 HTML:
<a href="/user1">User1</a> added <a href="/user2">user2</a>
是否可以在用户名总是更改的情况下清除它?
您打算只删除 HTML-标签吗?
然后试试这个:
sed 's/<[^>]*>//g' infile >outfile
我会把这个问题分成两个:
如何清理你的HTML
是的,可以直接使用 grep
,但我建议在使用 grep
之前使用标准工具将 HTML 转换为文本。我能想到两个(html2text
是一个转换工具,w3m
其实是一个文本浏览器),但还有更多:
wget -O - http://www.whosebug.com/ | html2text | grep "How.*\?"
w3m http://www.whosebug.com/ | grep "How.*\?"
这些示例将获取 Whosebug 的主页并显示在该页面上找到的所有以 How
开头并以 ?
结尾的问题(它为我显示了大约 20 行这样的行,但 YMMV 取决于您的设置)。
如何只提取需要的字符串
关于您的用户名,您可以调整您的表达式以匹配不同的用户(由于扩展的正则表达式语法,-E
是必需的,-o
将使 grep
仅打印每行的匹配部分:
[...] | grep -o -E ".ser[0-9]+ added .ser[0-9]+"
然而,这假定用户的名称始终与 .ser[0-9]+
匹配。您可能想使用像这样的更通用的模式:
[...] | grep -o -E "[[:graph:]]+[[:space:]]+added[[:space:]]+[[:graph:]]+"
此模式将匹配 added
被任意两个其他单词包围,由任意数量的空白字符分隔。或者更简单(假设一个词可能包含除空白以外的所有内容,并且这些词仅由一个空格分隔):
[...] | grep -o -E "[^ ]+ added [^ ]+"
我参与了一个网站,我想每天从该网站获取信息。该页面如下所示:
User1 added User2.
User40 added user3.
User13 added user71
User47 added user461
等等..
没有 JSON 端点来获取信息并对其进行解析。所以我必须 wget
页面并清理 HTML:
<a href="/user1">User1</a> added <a href="/user2">user2</a>
是否可以在用户名总是更改的情况下清除它?
您打算只删除 HTML-标签吗?
然后试试这个:
sed 's/<[^>]*>//g' infile >outfile
我会把这个问题分成两个:
如何清理你的HTML
是的,可以直接使用 grep
,但我建议在使用 grep
之前使用标准工具将 HTML 转换为文本。我能想到两个(html2text
是一个转换工具,w3m
其实是一个文本浏览器),但还有更多:
wget -O - http://www.whosebug.com/ | html2text | grep "How.*\?"
w3m http://www.whosebug.com/ | grep "How.*\?"
这些示例将获取 Whosebug 的主页并显示在该页面上找到的所有以 How
开头并以 ?
结尾的问题(它为我显示了大约 20 行这样的行,但 YMMV 取决于您的设置)。
如何只提取需要的字符串
关于您的用户名,您可以调整您的表达式以匹配不同的用户(由于扩展的正则表达式语法,-E
是必需的,-o
将使 grep
仅打印每行的匹配部分:
[...] | grep -o -E ".ser[0-9]+ added .ser[0-9]+"
然而,这假定用户的名称始终与 .ser[0-9]+
匹配。您可能想使用像这样的更通用的模式:
[...] | grep -o -E "[[:graph:]]+[[:space:]]+added[[:space:]]+[[:graph:]]+"
此模式将匹配 added
被任意两个其他单词包围,由任意数量的空白字符分隔。或者更简单(假设一个词可能包含除空白以外的所有内容,并且这些词仅由一个空格分隔):
[...] | grep -o -E "[^ ]+ added [^ ]+"