如何从文件中提取 URI

如何从文件中提取 URI

如何从一定数量的文件中提取所有 URI magnet: file:?我希望每行有一个 URI 作为输出。我想使用 bash 来实现这一点,但欢迎任何建议。我使用的是 Debian 7。

输入是一堆具有随机名称的 html 文件。 URI 都将位于a hrefHTML 标记中,例如:<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>。没有关于 URI 如何存储在每个文件中的方案,可能有n每个文件的 URI,它们可能位于文件中的任何位置。

预期输出应该是一个列表,其中的值由换行符分隔,例如:

magnet:?xt.......
magnet:?xt.......
magnet:?xt.......

答案1

我认为 URI 以空格结尾:grep -o 'magnet://[^ ]*' filename

更新:grep -o "magnet:?xt[^']*" filename

更新cat * | grep -o "magnet:?xt[^']*"或者grep -oh "magnet:?xt[^']*" *

答案2

使用GNU grep,您可以尝试:

$ echo "<a href='magnet:?xt=something1:something1:somerandomcharacters'>link text</a>" | 
grep -oP "magnet.*(?=')"
magnet:?xt=something1:something1:somerandomcharacters

答案3

您可以使用单引号和双引号作为分隔符,上周我看到有人根本不使用分隔符,如果您尝试使用协议部分之前的字符作为结束指示符,这会令人沮丧。您也可以有相对路径,它们也是有效的链接。您可以在 a 标签中包含 href 属性,或者在 img 标签中包含 src 属性,等等。

正确的方法是将整个文档解析为 html/xml,然后遍历所有元素,从中提取所有属性并将值与您的模式进行匹配。如果您关心相对路径,则还必须使用用于下载的 URL 来扩展它们。 PHP 或 Perl 应该有用于解析 DOM 树的函数。使用 grep 或类似的所有其他解决方案可能会跳过某些 URL 或过早截断。

也许curl或wget有一些很酷的功能来创建该列表,最有可能的是蜘蛛模式下的wget。

相关内容