如何使用正则表达式从充满垃圾的目录中提取 URL?

如何使用正则表达式从充满垃圾的目录中提取 URL?

我下载了数千个文本文件,它们都遵循相同的模式。该模式似乎在解析器(和 notepad++)中有效,但当我尝试在控制台上找到它,然后最终想将其通过管道传输到 wget 进行下载时,我得到了grep: Invalid range end

grep -E "\(https://foo.domain.com/([A-z])\w+.pdf\)" * > wget

我不熟悉正确的通配符,因为我尝试过.*或类似地转义正斜杠,但都无济于事。我确信这是愚蠢的行为。

基本上一切都是正确的,除了 .com/zzz.pdf 之间有一串随机的文本

答案1

grep -oP "https:\/\/foo\.domain\.com\/[A-z]+\w+\.pdf" | wget -i -

答案2

默认情况下,grep区分大小写,因此你必须以字符结束任何范围下列的范围开始。

  1. 这是无效的:([A-z]因为小写字母 z 位于大写字母 A 之前)
  2. 这是有效的:([A-Z]因为大写字母 Z 位于大写字母 A 之后)
  3. 这是有效的:([a-z]因为小写 z 位于小写 a 之后)

我怀疑你想写第三个(意味着所有匹配的 URL 都以小写开头)

该模式可能在不同的环境中起作用,因为该模式被配置为不区分大小写地匹配,或者更可能地,采用了不同的排序顺序(尝试LC_COLLATE=C grep 'A-z')。

相关内容