나는 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
과 일치하는 줄 사이의 모든 내용을 출력합니다. 첫 번째 정규 표현식을 구분하는 방법은 사용자 \#...#
정의 구분 기호를 사용하는 방법입니다. 내가 하는 일은 탈출 모드가 아니다 /
.