외부 파일의 링크를 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