如何搜索链接并仅保存包含特定数据的链接?

时间:2018-02-04 22:17:39

标签: bash curl

我有一个包含数千个超链接的文本文件,格式为"网址= http://examplelink.com"在名为mylinks.txt的文件中。

我想要做的是搜索所有这些链接,并检查其中是否包含某些关键字,例如" 2018"," 2017"。如果链接包含关键字,我想将链接保存在文件" yes.txt"如果它没有进入文件" no.txt"。

所以最后,我最终会得到两个文件:一个带有链接,这些链接将我发送到包含我正在搜索的关键字的页面,另一个带有不具有链接的链接。< / p>

我正在考虑用卷曲做这件事,但即使有可能我也不知道,我也不知道如何过滤&#34;&#34;按关键字链接。

到目前为止我得到的是:

curl -K mylinks.txt >> output.txt

但这只会创建一个超大文件,其中包含所搜索链接的HTML。 我通过各种卷曲教程搜索和阅读,并且没有发现任何有选择性的&#34;搜索页面并保存符合条件的页面的链接(而不是内容)。

2 个答案:

答案 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循环。对于每个网址,我们curlgrep表示其中的有趣关键字(在本例中为“2017”),如果grep返回0,我们会附加此带有趣网址的文件的URL。

显然,您应该调整路径和关键字。