我有一个包含数千个超链接的文本文件,格式为"网址= http://examplelink.com"在名为mylinks.txt的文件中。
我想要做的是搜索所有这些链接,并检查其中是否包含某些关键字,例如" 2018"," 2017"。如果链接包含关键字,我想将链接保存在文件" yes.txt"如果它没有进入文件" no.txt"。
所以最后,我最终会得到两个文件:一个带有链接,这些链接将我发送到包含我正在搜索的关键字的页面,另一个带有不具有链接的链接。< / p>
我正在考虑用卷曲做这件事,但即使有可能我也不知道,我也不知道如何过滤&#34;&#34;按关键字链接。
到目前为止我得到的是:
curl -K mylinks.txt >> output.txt
但这只会创建一个超大文件,其中包含所搜索链接的HTML。 我通过各种卷曲教程搜索和阅读,并且没有发现任何有选择性的&#34;搜索页面并保存符合条件的页面的链接(而不是内容)。
答案 0 :(得分:1)
- 未测试 - 对于包含&#34; 2017&#34;的行中的链接或&#34; 2018&#34;。
cat mylinks.txt | grep -E '2017|2018' | grep -o 'URL =*>' >> yes.txt
获取不包含关键字的行的网址。
cat mylinks.txt | grep -vE '2017|2018' | grep -o 'URL =*>' >> no.txt
这是unix管道。 (char | )获取左侧的程序输出 stdout ,并将 stdin 提供给右侧的程序。
在类Unix的计算机操作系统中,管道是一系列的 由标准流链接在一起的进程,以便 每个进程(stdout)的输出直接作为输入(stdin)提供给 下一个。 https://en.wikipedia.org/wiki/Pipeline_(Unix)
答案 1 :(得分:0)
这是我对它的看法(在一个url文件上测试了一些例子)。 这应该保存为脚本,直接在控制台中输入它太长了。
#!/bin/bash
urlFile="/path/to/myLinks.txt"
cut -d' ' -f3 "$urlFile" | \
while read url
do
echo "checking url $url"
if (curl "$url" | grep "2017")
then
echo "$url" >> /tmp/yes.txt
else
echo "$url" >> /tmp/no.txt
fi
done
说明:cut
是必要的,以便在每一行中删除前缀“URL =”。然后将url输入while-read
循环。对于每个网址,我们curl
,grep
表示其中的有趣关键字(在本例中为“2017”),如果grep
返回0
,我们会附加此带有趣网址的文件的URL。
显然,您应该调整路径和关键字。