如何使用GREP匹配字符串中带有引号的字符串?

时间:2019-06-03 21:50:57

标签: macos grep

我正在寻找一组HTML文件中的字符串匹配项。我正在寻找表单的所有匹配实例:

="https://  ...  .mp4"

请记住,这些不是单独的一行。它们都聚在一起而没有任何空格,因此返回实际行将不起作用。

我希望GREP返回此类URL的所有分组实例。我想要这样的唯一链接输出:

="https://www.something.com/file1.mp4"
="https://www.something.com/file2.mp4"
="https://www.something.com/file3.mp4"
="https://www.something.com/file4.mp4"

这是我认为需要的搜索参数:

grep -hRo '\="https://.*\.mp4"\>' *.html

双引号和等号应该是实际搜索字符串的一部分,但是它们使我的搜索结果混乱不清,我无法弄清楚如何正确地对它们进行转义。

我正在终端的OSX上运行它。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

使用传统的正则表达式,双引号被单引号转义。您只需要转义量词+(一个或多个)和.mp4

中的原义点
grep -o '="http[^"]\+\.mp4"'

使用GNU Grep中提供的PCRE,您实际上可以(无需打印)将前导/后跟等号/双引号与Lookarounds相匹配:

grep -Po '(?<==")http[^"]+\.mp4(?=")'
  • (?<= ... )-向后看
  • (?= ... )-前瞻

返回:

https://www.something.com/file1.mp4
https://www.something.com/file2.mp4
https://www.something.com/file3.mp4
https://www.something.com/file4.mp4