표현식1 다음에 오는 표현식2에 대한 grep 정규식 패턴

표현식1 다음에 오는 표현식2에 대한 grep 정규식 패턴

나는 HTML 파일 묶음 중 제목에 "에이전트"라는 단어가 있고 해당 제목 뒤에 특정 에이전트의 이름이 있는 파일을 찾으려고 합니다.

그럼 보통 이렇죠

<h3>Agent</h3>
<p>Blah blah blah </p>
<p>Their agent is XYZ Corp.</p>

찾을 수 있어야 한다

그러나 제목과 XYZ Corp 인스턴스 간의 마크업이나 콘텐츠의 규칙성은 보장할 수 없습니다. 따라서 DOS 또는 이와 유사한 상황에서는 "Agent*XYZ"의 의미를 검색할 수 있습니다.

-match the string 'Agent'
-followed by anything
-followed by the string 'XYZ'

Ubuntu에서 grep을 사용하여 어떻게 작성합니까? 나는 열심히 노력했다

grep -lc 'Agent*XYZ' *.html
grep -lc 'Agent.*?XYZ' *.html

아무도 성공하지 못했습니다. 여러 파일에서 패턴을 수동으로 찾을 수 있으므로 패턴이 존재한다는 것을 알 수 있습니다.

티아

답변1

다음과 같은 것이 목표에 좋은 것 같습니다.

$ cat d2.txt
<h3>Agent</h3>
<p>Blah blah blah </p>
<p>Their agent is XYZ Corp.</p>

$ grep -i 'agent' d2.txt #-i = ignore case. By default grep returns lines containing agent followed by anything or even alone
<h3>Agent</h3>
<p>Their agent is XYZ Corp.</p>

$ grep -iE 'agent.*XYZ' d2.txt #match agent followed by XYZ
<p>Their agent is XYZ Corp.</p>

답변2

h3제목이 항상 상담원 이름과 별도의 줄에 나타난다 고 가정 sed하면 원하는 대로 작동하는 것 같습니다.

주어진 입력 파일

some data
at the top
<h3>Agent</h3>
<p>Blah blah blah </p>
<p>Their agent is XYZ Corp.</p>
some data
at the bottom

주문하다

sed -n '\#<h3>Agent</h3>#,/XYZ/p' input.html

생성할 것이다

<h3>Agent</h3>
<p>Blah blah blah </p>
<p>Their agent is XYZ Corp.</p>

이 명령은 sed두 정규식 <h3>Agent</h3>및 (포함) XYZ과 일치하는 줄 사이의 모든 내용을 출력합니다. 첫 번째 정규 표현식을 구분하는 방법은 사용자 \#...#정의 구분 기호를 사용하는 방법입니다. 내가 하는 일은 탈출 모드가 아니다 /.

관련 정보