grep macOS匹配错误

时间:2018-01-28 16:16:25

标签: regex bash macos grep

我尝试创建一个备份脚本,该脚本获取带有curl的页面HTML,然后从HTML页面创建一个包含所有pdf网址的文本文件。我使用grep来存档它,但它匹配页面的所有内容(换行符除外)。我正在运行的命令如下:

grep -io -e "http:\/\/example\.com\/files\/.*[.pdf|.epub]" page.html

我想要匹配的网址类似于: http://example.com/files/all/january/file 1 from user 1 [1983].pdfhttp://example.com/files/2018/january/file 1 from user 22 [2018].epub

使用在线工具进行测试时,正则表达式运行良好。

任何线索?

注意: 我使用的是grep(ggrep)版本的brew安装: ggrep (GNU grep) 3.1

2 个答案:

答案 0 :(得分:0)

这样的东西
grep -ioE 'http:\/\/example\.com\/files\/.*?\.(pdf|epub)'

应该正常工作吗?

注意您提供的模式与HTTPS网址或//example.com/...(推断协议?)网址不匹配。

此外,您的模式会错误地将网址与奇怪的扩展名.pdffoo.epubs匹配。

我假设你知道你想要提取的网址格式。

非常确定上述模式可以满足您的需求,正如您在问题中所阐述的那样。

答案 1 :(得分:0)

方括号语法用于字符集,不用于分组。你也不需要逃避正斜杠:

grep -io -e "http://example\.com/files/.*\(\.pdf\|\.epub\)" page.html

括号和管道之前的反斜杠是必需的,因为grep默认使用Basic Regular Expressions。我在扩展中的句点之前添加了反斜杠,以便它们与任何字符都不匹配。