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