我尝试创建一个备份脚本,该脚本获取带有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].pdf
或
http://example.com/files/2018/january/file 1 from user 22 [2018].epub
使用在线工具进行测试时,正则表达式运行良好。
任何线索?
注意:
我使用的是grep(ggrep)版本的brew安装:
ggrep (GNU grep) 3.1
答案 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。我在扩展中的句点之前添加了反斜杠,以便它们与任何字符都不匹配。