如何在Bash、grep或batch中删除HTML文件的所有链接并将其存储在文本文件中
我有一个文件,它有大约150个锚定标签。我只需要这些标签的链接,也就是,如何在Bash、grep或batch中删除HTML文件的所有链接并将其存储在文本文件中,bash,shell,awk,grep,cut,Bash,Shell,Awk,Grep,Cut,我有一个文件,它有大约150个锚定标签。我只需要这些标签的链接,也就是,。我只想得到那个角色 当我运行grep时 cat website.htm | grep -E '<a href=".*">' > links.txt 除了它是错误的,它不工作给我一些错误的参数错误。。。所以我假设这个文件也应该被传递。可能类似于cut-d''--output delimiter=$'\n'grepedText.txt>links.txt 但是如果可能的话,我想用一个命令来完成这个任务。。。
。我只想得到那个角色
当我运行grep时
cat website.htm | grep -E '<a href=".*">' > links.txt
除了它是错误的,它不工作给我一些错误的参数错误。。。所以我假设这个文件也应该被传递。可能类似于cut-d''--output delimiter=$'\n'grepedText.txt>links.txt
但是如果可能的话,我想用一个命令来完成这个任务。。。所以我试着做一个命令
您可以为此使用
grep
:
grep -Po '(?<=href=")[^"]*' file
请注意,无需使用grep'编写cat drawspace.txt | grep'
你好
其他事情
$grep-Po'(?我猜您的PC或Mac默认情况下不会安装lynx命令(它在web上免费提供),但lynx允许您执行以下操作:
$lynx-dump-image_links-listonly/usr/share/xdiagnose/workloads/youtube-reload.html
输出:
参考资料
file://localhost/usr/share/xdiagnose/workloads/youtube-reload.html
然后,对http:lines进行grep是一件简单的事情。甚至可能有lynx选项只打印http:lines(lynx有很多很多选项)。使用grep
提取其中包含链接的所有行,然后使用sed
拉出URL:
grep -o '<a href=".*">' *.html | sed 's/\(<a href="\|\">\)//g' > link.txt;
grep-o'*.html | sed的/\(\)//g'>link.txt;
根据的评论,使用正则表达式解析HTML或XML文件基本上没有完成。诸如sed
和awk
等工具对于处理文本文件非常强大,但当归结为解析复杂的结构化数据(如XML、HTML、JSON等)时,它们只不过是一把大锤。是的,你可以得到这项工作已经完成,但有时会付出巨大的代价。要处理如此精细的文件,您需要使用一组更有针对性的工具,从而更加精巧
在解析XML或HTML时,可以很容易地使用
对于XHTML文件,您可以使用:
xmlstarlet sel --html -N "x=http://www.w3.org/1999/xhtml" \
-t -m '//x:a/@href' -v . -n
其中-N
给出了XHTML名称空间(如果有),这由
<html xmlns="http://www.w3.org/1999/xhtml">
bleh它没有将链接放在单独的行上……基本上链接是由\n字符连接的,.cat website.htm | grep-Po'(?哦,你提到过,我的天,你正在快速读取一个文件,并将输出放在一个新文件中,这就像grep-Po'(?准确地说,@A'saDickens,正如您所指出的那样重定向。@A'saDickens这里使用的grep选项需要GNU grep,这可能在您的UNIX安装中不存在。这对我来说是有效的,不幸的是,我的html更复杂,所以我没有得到我想要的,但这是问题XD的错误。谢谢,这简化了它,因此手动工作k不是一个累赘的编辑器,它是一个流编辑器。使用它在一行上进行简单的替换。它有大量的语言结构,但唯一有用的是s、g和p(带-n)-在20世纪70年代中期发明awk后,所有其他的都变得过时了(但出于某种原因,人们一直在拖拽它们并使用它们)不,sed仍然是在一行上进行简单替换的最佳工具,只是sed是在awk之前发明的,所以它有很多语言结构可以让你做非常复杂的事情,但一旦awk发明,它就有了一种处理复杂操作的改进语言,所以你不再需要sed,而需要那些sed语言结构T从未被删除,因此它们今天仍然存在,人们今天莫名其妙地使用它们来创建最可怕的不可读脚本。规则如下:使用grep
查找模式并打印匹配行,使用sed
在单行上进行简单替换,使用awk
进行任何其他文本操作de>grep
和sed
都是为了简化而创建的,它们的命名基于旧文本编辑器ed
-grep
是以g/re/p
命名的,这是ed
是Stream ed
时查找regexp并打印匹配行的格式:3这将有助于我在阅读时理解要点sed:1:“s/\()//g”:RE错误:括号不平衡
grep -Po '(?<=href=")[^"]*' file
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
http://www.drawspace.com/lessons/b06/seeing-values
$ cat a
hello <a href="httafasdf">asdas</a>
hello <a href="hello">asdas</a>
other things
$ grep -Po '(?<=href=")[^"]*' a
httafasdf
hello
$ sed -n 's/.*href="\([^"]*\).*/\1/p' file
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
http://www.drawspace.com/lessons/b06/seeing-values
grep -o '<a href=".*">' *.html | sed 's/\(<a href="\|\">\)//g' > link.txt;
xmlstarlet sel --html -N "x=http://www.w3.org/1999/xhtml" \
-t -m '//x:a/@href' -v . -n
<html xmlns="http://www.w3.org/1999/xhtml">
$ tidy -q -numeric -asxhtml --show-warnings no <file.html> \
| xmlstarlet sel --html -N "x=http://www.w3.org/1999/xhtml" \
-t -m '//x:a/@href' -v . -n
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
http://www.drawspace.com/lessons/b06/seeing-values