我想 grep 来自外部文件的链接example.txt
。
example.txt
包含:
(https://example.com/pathto/music.mp3)music.mp3
代码:
egrep -o -m1 '(https)[^'\"]+.mp3' example.txt
输出:
https://example.com/pathto/music1.mp3)music.mp3
当我运行 grep 时,它检测最后一个 .mp3 作为输出的结尾,而我只需要它在第一次出现后结束。如何告诉 grep 在找到第一个模式后停止?
我想要的输出:
https://example.com/pathto/music.mp3
我只想提取以以下开头https
和结尾的任何字符串mp3
答案1
标准 grep 不接受?
通常使其成为非贪婪的修饰符。
但是你可以尝试 -P 选项 - 如果在你的发行版中启用 - 将使其接受 Perl 风格的正则表达式:
grep -oP -m1 "(https)[^'\"]+?.mp3" mp3.txt
如果这不起作用,您可以在特定示例中在范围中包含正确的括号,这样它就不会超出括号:
egrep -o -m1 "(https)[^'\")]+?.mp3" mp3.txt
答案2
egrep 不支持非贪婪匹配。使用 perl 模式-P
将帮助您:
grep -o -m1 -P 'https.*?mp3' example.txt
答案3
~$ cat example.txt
(https://example.com/pathto/music.mp3)music.mp3
~$ grep -Po "(https)[^'\"].*?mp3" example.txt
https://example.com/pathto/music.mp3