如何在Bash、grep或batch中删除HTML文件的所有链接并将其存储在文本文件中

如何在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 但是如果可能的话,我想用一个命令来完成这个任务。。。

我有一个文件,它有大约150个锚定标签。我只需要这些标签的链接,也就是,
。我只想得到那个角色

当我运行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