Bash 是否可以使用grep清理HTML文件以提取某些字符串?

Bash 是否可以使用grep清理HTML文件以提取某些字符串?,bash,unix,grep,Bash,Unix,Grep,有一个网站,我是其中的一部分,我想每天从该网站获取信息。页面如下所示: 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> 已添

有一个网站,我是其中的一部分,我想每天从该网站获取信息。页面如下所示:

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 
sed's/]*>//g'infle>outfile

我将把这个问题分为两部分:

如何清理HTML

是的,可以直接使用
grep
,但我建议在使用
grep
之前使用标准工具将HTML转换为文本。我可以想到两个(
html2text
是一个转换实用程序,
w3m
实际上是一个文本浏览器),但还有更多:

  • wget-O-http://www.stackoverflow.com/ |html2text| grep“如何。*\?”
  • w3mhttp://www.stackoverflow.com/ |grep“How.*\?”
这些示例将进入的主页,并显示该页面上的所有问题,从
How
开始,以
结束(它为我显示了大约20行这样的行,但YMMV取决于您的设置)

如何仅提取所需字符串

关于您的用户名,您只需调整表达式以匹配不同的用户(
-E
是必需的,因为扩展的正则表达式语法,
-o
将使
grep
仅打印每行的匹配部分):

但是,这假定用户的名称始终与
.ser[0-9]+
匹配。您可能希望使用更通用的模式,如以下模式:

[...] | grep -o -E "[[:graph:]]+[[:space:]]+added[[:space:]]+[[:graph:]]+"
此模式将与添加的
匹配
由任意两个其他单词包围,由任意数量的空白字符分隔。或者更简单(假设一个单词可能包含除空格以外的所有内容,并且单词之间仅用一个空格分隔):


是的,这是可行的,尽管标签中列出的工具可能不是最适合这项工作的。这部分取决于数据布局的统一和文明程度。如果全部在一行上,没有不必要的间距,则比每行都如图所示更困难。它还取决于周围的HTML;例如,
部分可能会被忽略。您必须推断信息在HTML中的存储位置,并决定如何获取它。但是HTML解析器可能是最好的。临时解析可以完成这项工作,但要小心;egrep-v'^[:space:][]*$'out.txt就是它喝的!非常感谢。
[...] | grep -o -E "[[:graph:]]+[[:space:]]+added[[:space:]]+[[:graph:]]+"
[...] | grep -o -E "[^ ]+ added [^ ]+"