我下载了数千个文本文件,它们都遵循相同的模式。该模式似乎在解析器(和 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区分大小写,因此你必须以字符结束任何范围下列的范围开始。
- 这是无效的:(
[A-z]
因为小写字母 z 位于大写字母 A 之前) - 这是有效的:(
[A-Z]
因为大写字母 Z 位于大写字母 A 之后) - 这是有效的:(
[a-z]
因为小写 z 位于小写 a 之后)
我怀疑你想写第三个(意味着所有匹配的 URL 都以小写开头)
该模式可能在不同的环境中起作用,因为该模式被配置为不区分大小写地匹配,或者更可能地,采用了不同的排序顺序(尝试LC_COLLATE=C grep 'A-z'
)。