为什么 wget 之后跳过了这个 grep?

为什么 wget 之后跳过了这个 grep?

我正在尝试从 wget 的 HTML 输出中 grep 一个字符串,以便将 URL 连接在一起。使用建议这里我试过

wget -O - https://www.printable-puzzles.com/download.php?p=cw2&f=h4aHZGdsa4djoZmY | grep -Eio '\/dl\.php\?.+\.pdf'

但整个 HTML 都显示在终端中,就好像没有管道和 grep 命令一样。我已经通过将 HTML 保存在文件中并对其运行 grep 来检查正则表达式模式,因此模式不是问题。我做错了什么?

答案1

您的 URL 包含一个&字符,该字符在 shell 中充当命令分隔符(并导致前面的命令在后台运行)。因此,您实际上正在运行两个单独的命令:

  1. wget -O - https://www.printable-puzzles.com/download.php?p=cw2(背景工作)
  2. f=h4aHZGdsa4djoZmY | grep -Eio '\/dl\.php\?.+\.pdf'(普通的)

使用引号括住 URL 可以避免此问题。

答案2

您的语句看起来不错,应该会返回您期望的结果。我无法尝试您的确切示例,因为 URI 不再可用。但为了确保获得尽可能干净的输出,您可能需要确保保留 stderr 输出:

wget -O - https://www.printable-puzzles.com/download.php?p=cw2&f=h4aHZGdsa4djoZmY 2>/dev/null | grep -Eio '\/dl\.php\?.+\.pdf'

(请注意2>/dev/null。)

相关内容