我有一个文件是HTML,它有大约150锚标签。我只需要从这些标签的链接,又名,<a href="*http://www.google.com*"></a>
。我想只得到http://www.google.com部分。
当我运行grep时,
cat website.htm | grep -E '<a href=".*">' > links.txt
这将返回整行,它发现不是我想要的链接,所以我尝试使用cut
命令:
cat drawspace.txt | grep -E '<a href=".*">' | cut -d’”’ --output-delimiter=$'\n' > links.txt
除了它是错误的,它不工作给予我一些错误的参数...所以我假设该文件也应该沿着。也许像cut -d’”’ --output-delimiter=$'\n' grepedText.txt > links.txt
。
但我想在一个命令中完成这一点,如果可能的话...所以我尝试做一个AWK命令。
cat drawspace.txt | grep '<a href=".*">' | awk '{print $2}’
但是这个也不能运行。它在要求我更多的输入,因为我还没有完成。
我试着写一个批处理文件,它告诉我FINDSTR不是一个内部或外部命令...所以我假设我的环境变量被搞砸了,而不是修复我试图在Windows上安装grep,但这给了我同样的错误....
问题是,从HTML中剥离HTTP链接的正确方法是什么?有了这个,我将使它适合我的情况。
附:我读了太多的链接/堆栈溢出的帖子,显示我的引用会花太长时间....如果需要示例HTML来显示过程的复杂性,那么我会添加它。
我也有一台Mac和一台PC,我在它们之间来回切换,使用它们的shell/batch/grep命令/terminal命令,所以或者都会帮助我。
我还想指出我在正确的目录中
HTML:
<tr valign="top">
<td class="beginner">
B03
</td>
<td>
<a href="http://www.drawspace.com/lessons/b03/simple-symmetry">Simple Symmetry</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B04
</td>
<td>
<a href="http://www.drawspace.com/lessons/b04/faces-and-a-vase">Faces and a Vase</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B05
</td>
<td>
<a href="http://www.drawspace.com/lessons/b05/blind-contour-drawing">Blind Contour Drawing</a> </td>
</tr>
<tr valign="top">
<td class="beginner">
B06
</td>
<td>
<a href="http://www.drawspace.com/lessons/b06/seeing-values">Seeing Values</a> </td>
</tr>
预期产出:
http://www.drawspace.com/lessons/b03/simple-symmetry
http://www.drawspace.com/lessons/b04/faces-and-a-vase
http://www.drawspace.com/lessons/b05/blind-contour-drawing
etc.
7条答案
按热度按时间deikduxw1#
vmpqdwk32#
您可以使用
grep
来执行以下操作:它打印
href="
之后的所有内容,直到出现新的双引号。对于给定的输入,它返回:
cat drawspace.txt | grep '<a href=".*">'
,可以用grep '<a href=".*">' drawspace.txt
去掉useless use of cat。*另一个例子
2fjabf4q3#
我猜你的PC或Mac默认情况下不会安装lynx命令(它可以在网络上免费获得),但lynx可以让你做这样的事情:
$lynx -dump -image_links -listonly/usr/share/xdiagnose/workloads/youtube-reload.html
输出:参考文献
这是一个简单的事情grep为http:行。甚至可能有lynx选项来打印http:lines(lynx有很多很多的选择)。
vmjh9lq94#
使用
grep
提取所有包含链接的行,然后使用sed
提取URL:zynd9foi5#
根据triplee的评论,使用正则表达式解析HTML或XML文件本质上是没有完成的。像
sed
和awk
这样的工具在处理文本文件时非常强大,但是当它归结为解析复杂结构的数据时-例如XML,HTML,JSON... -它们只不过是一把大锤。是的,你可以完成这项工作。但有时要付出巨大的代价。为了处理如此精细的文件,您需要通过使用一组更有针对性的工具来进行更多的技巧。在解析XML或HTML的情况下,可以很容易地使用
xmlstarlet
。如果是XHTML文件,可以用途:
其中
-N
给出XHTML名称空间(如果有的话),这由然而,由于HTML页面通常不是格式良好的XML,使用
tidy
对其进行清理可能会很方便。在上面的示例中,这给出了:vecaoik16#
假设一个格式良好的
HTML
文档,每行只有1个href
链接,这里有一个awk
方法,而不需要backreferences
到regex
:capturing groups
3npbholx7#
下面是一个(更通用的)
dash
脚本,它可以比较两个文件中的URL(由://
分隔)/或一个文件中的URL与一组文件中的URL(使用--help
标志调用此脚本以了解如何使用它-该脚本应在Linux和Mac OS中开箱即用):对于所问的问题-这应该做到这一点: