질문 제목이 다소 모호할 수도 있지만, 제가 하고 싶은 말이 바로 그것입니다.
내 서버에 로컬로 자주 변경되는 HTML 파일이 있습니다. 여러 번 나타납니다.
<p>Jumble of random text</p>
<p>More text</p>
등...
나는 내가 찾고 있는 텍스트(예를 들어 "random")를 찾을 때까지 다양한 무작위 텍스트를 모두 정렬할 수 있기를 원합니다. 이 텍스트는 파일의 어느 곳에나 있을 수 있습니다. 그런 다음 변수를 할당하고 싶습니다.
Jumble of random text
그 사이의 모든 것:
<p> and </p>
지금까지 나는 이것을 가지고 있습니다 :
echo grep -i 'random' search.html | grep -o -P '(?<=<p>).*(?=</p>)' search.html
이것은 어느 정도 작동하지만 단락 태그의 첫 번째와 마지막 항목을 찾고 있으므로 의미 없는 많은 데이터가 출력됩니다. 즉, 이 경우에는 다음과 같습니다.
Jumble of random text
More text
어떻게 하면 반환되게 할 수 있나요?
Jumble of random text
매우 혼란스럽고 빠르게 진행됩니다.
답변1
일치하는 패턴이 .*
호출되기 때문입니다.탐욕스러운 매칭즉, 반환된다는 의미입니다.가장 큰검색 패턴과 일치하는 문자열입니다.
당신이하고 싶은 것은 사용하는 것입니다욕심이 없다(또는게으른) 일치, 반환가장 짧은패턴과 일치하는 문자열입니다. 그리디 매칭을 에서 로 변경하면 .*
됩니다 .*?
. 그러나 grep
이 기능은 일반적으로 기본적으로 지원되지 않지만 -P
Perl과 유사한 정규식 일치를 허용하는 옵션을 사용하여 활성화할 수 있습니다.
즉, grep 명령을 grep -o -P '(?<=<p>).*?(?=</p>)'
.
이 답변에 대한 자세한 내용을 보려면 다음을 방문하십시오.https://stackoverflow.com/questions/3027518/non-greedy-grep