我有一些标记文件要处理,其中包含链接到图片,我想下载。例如,减价档案:
[](https://imgs.xkcd.com/comics/git.png)
a lot of text
some more text...
[](https://1.bp.blogspot.com/-Ze2SiBflkZ4/XbtF1TjELcI/AAAAAAAALL4/IDC6W-b5moU0eGu2eN60aZ4pxfXW1ybmQCLcBGAsYHQ/s1600/take_a_break_git.gif)
some more text
another URL but not image
[https://github.com]
so on我试图解析这个文件并提取图像URL列表,稍后我可以通过wget命令下载该列表。
到目前为止,我已经使用了grep和sed,并得到了结果:
$ sed -nE "/https?:\/\/[^ ]+.(jpg|png|gif)/p" $path
[](https://imgs.xkcd.com/comics/git.png)
[](https://1.bp.blogspot.com/-Ze2SiBflkZ4/XbtF1TjELcI/AAAAAAAALL4/IDC6W-b5moU0eGu2eN60aZ4pxfXW1ybmQCLcBGAsYHQ/s1600/take_a_break_git.gif)
$ grep -Eo "https?://[^ ]+.(jpg|png|gif)" $path
https://imgs.xkcd.com/comics/git.png)](https://imgs.xkcd.com/comics/git.png
https://1.bp.blogspot.com/-Ze2SiBflkZ4/XbtF1TjELcI/AAAAAAAALL4/IDC6W-b5moU0eGu2eN60aZ4pxfXW1ybmQCLcBGAsYHQ/s320/take_a_break_git.gif)](https://1.bp.blogspot.com/-Ze2SiBflkZ4/XbtF1TjELcI/AAAAAAAALL4/IDC6W-b5moU0eGu2eN60aZ4pxfXW1ybmQCLcBGAsYHQ/s1600/take_a_break_git.gifregex本质上运行良好,但问题是,由于相同的URL在同一行中出现了两次,所选文本是https的第一次出现和最后一次出现jpg|png|gif。但我要的是https的第一次出现和jpg|png|gif的第一次发生
怎么才能解决这个问题?
P.S.我也尝试过lynx -dump -image_links -listonly $path,但这会打印出整个文件。
我也对解决这个问题的其他选项持开放态度,只要我能够将代码连接到我当前的shell脚本中。
发布于 2021-01-19 21:52:09
您可以在否定的括号表达式中添加方括号:
grep -Eo "https?://[^][ ]+\.(jpg|png|gif)"见在线演示。详细信息
https?:// - http://或https://[^][ ]+ - ]、[和space以外的一个或多个字符\. -a点(jpg|png|gif) -三种替代子字符串中的一种。https://stackoverflow.com/questions/65800023
复制相似问题