Intereting Posts
Что действительно делает dh_usrlocal Все мои файлы были удалены после того, как я попытался улучшить свой звук Какие файлы необходимо удалить перед дублированием виртуальной машины? Диспетчер событий в bash (Ubuntu Gnu / Linux) Проблема с беспроводным светодиодным индикатором Печать строк после одного шаблона grep, пока не будет найден новый шаблон Не удается связаться с локальным DNS-сервером для подзонов локального домена, поскольку брандмауэр возвращает IP-адрес шлюза настройка чувствительности клавиатуры с помощью kbdrate Все данные исчезли из массива RAID MDADM Как X11 взаимодействует с ядром / выполняет вход в систему Что может привести к тому, что каталоги в / var / run исчезнут / не будут созданы при запуске? (CentOS 7.3) Gentoo: изменение размера раздела / boot в начале диска Извлечь данные из текстового файла с помощью grep Проблемы при запуске tarball с acl Как изменить определенные привязки клавиш в Tmux?

не жадный grep

Я хочу 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

Стандартный grep не принимает ? который обычно делает его неживым.

Но вы можете попробовать параметр -P, который – если включен в вашем дистрибутиве – заставит его принимать регулярные выражения в стиле Perl:

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

Если это не сработает, вы можете в качестве конкретного примера включить правильную скобку в диапазон, чтобы он не смотрел за круглые скобки:

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

egrep не поддерживает нежелательное соответствие. Использование режима perl -P поможет вам:

 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