gpt4 book ai didi

linux - 使用 Bash 来 cURL 网站和 grep 关键字

转载 作者:太空狗 更新时间:2023-10-29 11:42:13 27 4
gpt4 key购买 nike

我正在尝试编写一个脚本,该脚本将按以下顺序执行一些操作:

  1. cURL 网站来自包含在“url_list.txt”(换行符)文件中的 url 列表。
  2. 对于列表中的每个网站,我想 grep 该网站以查找包含在“keywords.txt”(换行符)文件中的关键字。
  3. 我想通过以下列格式(或类似格式)打印到终端来完成:

    $URL(包含匹配):$keyword(匹配)

需要能在Ubuntu中运行(GNU grep等)

不需要cURL和grep;只要功能存在。

到目前为止我有:

#!/bin/bash
keywords=$(cat ./keywords.txt)
urllist=$(cat ./url_list.txt)
for url in $urllist; do
content="$(curl -L -s "$url" | grep -iF "$keywords" /dev/null)"
echo "$content"
done

但出于某种原因,无论我尝试调整或更改什么,它都会在某种程度上失败。

我怎样才能完成这个任务?

谢谢

最佳答案

这是我的做法:

#!/bin/bash
keywords="$(<./keywords.txt)"
while IFS= read -r url; do
curl -L -s "$url" | grep -ioF "$keywords" |
while IFS= read -r keyword; do
echo "$url: $keyword"
done
done < ./url_list.txt

我改变了什么:

  • 我用了$(<./keywords.txt)阅读keywords.txt .这不依赖于外部程序(原始脚本中的 cat)。
  • 我更改了 for循环遍历 url 列表,进入 while环形。这保证我们使用 Θ(1)内存(即我们不必将整个 url 列表加载到内存中)。
  • 我从 grep 中删除了/dev/null。 grep来自 /dev/null单独是没有意义的,因为它在那里找不到任何东西。相反,我调用 grep没有参数,以便它过滤它的 stdin (在这种情况下恰好是 curl 的输出)。
  • 我添加了 -o grep 的标志以便它只输出匹配的关键字。
  • 我删除了您捕获 curl 输出的子 shell .相反,我直接运行命令并将其输出提供给 while 循环。这是必要的,因为我们可能获得的不仅仅是每个网址的关键字匹配。

关于linux - 使用 Bash 来 cURL 网站和 grep 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584842/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com