두 개의 다른 알려진 문자열로 둘러싸인 문자열을 파일에서 검색하시겠습니까?

두 개의 다른 알려진 문자열로 둘러싸인 문자열을 파일에서 검색하시겠습니까?

질문 제목이 다소 모호할 수도 있지만, 제가 하고 싶은 말이 바로 그것입니다.

내 서버에 로컬로 자주 변경되는 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이 기능은 일반적으로 기본적으로 지원되지 않지만 -PPerl과 유사한 정규식 일치를 허용하는 옵션을 사용하여 활성화할 수 있습니다.

즉, grep 명령을 grep -o -P '(?<=<p>).*?(?=</p>)'.

이 답변에 대한 자세한 내용을 보려면 다음을 방문하십시오.https://stackoverflow.com/questions/3027518/non-greedy-grep

관련 정보