grep no codicioso

Quiero grep un enlace de un file externo example.txt .

example.txt contiene:

 (https://example.com/pathto/music.mp3)music.mp3 

el código:

 egrep -o -m1 '(https)[^'\"]+.mp3' example.txt 

salida:

 https://example.com/pathto/music1.mp3)music.mp3 

Cuando ejecuto grep, detecta el último .mp3 como final de la salida, mientras que solo necesito que termine después de la primera aparición. ¿Cómo puedo decirle a grep que pare después de encontrar el primer patrón?

Mi resultado deseado:

 https://example.com/pathto/music.mp3 

Solo quiero extraer cualquier cadena que empiece por https y termine con mp3

El grep estándar no acepta el ? modificador que normalmente lo haría no codicioso.

Pero puedes probar la opción -P que, si está habilitada en tu distribución, hará que acepte expresiones regulares de estilo Perl:

 grep -oP -m1 "(https)[^'\"]+?.mp3" mp3.txt 

Si eso no funciona, podría include, para su ejemplo específico, el paréntesis correcto en el range para que no se vea más allá del paréntesis:

 egrep -o -m1 "(https)[^'\")]+?.mp3" mp3.txt 

egrep no admite coincidencias no codiciosas. El uso del modo perl -P le ayudará a:

 grep -o -m1 -P 'https.*?mp3' example.txt 
 ~$ cat example.txt (https://example.com/pathto/music.mp3)music.mp3 ~$ grep -Po "(https)[^'\"].*?mp3" example.txt https://example.com/pathto/music.mp3