Perl 또는 sed를 사용하여 여러 HTML 일치 행 앞에 있는 모든 항목을 제거하십시오.

Perl 또는 sed를 사용하여 여러 HTML 일치 행 앞에 있는 모든 항목을 제거하십시오.

Perl 또는 sed 명령을 사용하여 현재 폴더의 모든 파일에서 여러 HTML 일치 행 앞에 있는 모든 항목을 삭제하고 싶습니다.

현재 폴더에 있는 내 파일 중 하나는 다음과 같습니다.

<li>violet</li>
<p>red</p>
<p>blue</p>
<p>gray</p>

<li><a href="#part1">Part 1</a>

</li>
<h2>Part 1</h2>
<p>pink</p>

다음 HTML 줄(보시다시피 빈 줄이 포함될 수 있음)을 일치시키기 전에 모든 것을 제거하려고 합니다.

<li><a href="#part1">Part 1</a>

</li>

따라서 최종 편집된 파일은 다음과 같습니다.

<h2>Part 1</h2>
<p>pink</p>

나는 Perl이 다음을 사용하여 특정 문자 앞의 모든 것을 제거할 수 있다는 것을 발견했습니다:

perl -p -e 's/^.*?abc/abc/'

그리고 sed :

sed 's/[^abc]*\(abc.*\)/\1/'

하지만 이를 html 태그와 일치시킬 수는 없습니다.

누구든지 좋은 제안이 있다면!

답변1

정규식으로 HTML을 구문 분석하지는 않지만 "다음 및 포함 내용 인쇄 <h2>"를 기반으로 이 작업을 수행할 수 있습니다.

perl -nE'state $start ||= m?<h2>? and print' ./test

Perl에서도 정규식을 사용하지 않습니다. 당신은 뭔가를 사용할 것입니다Mojo::DOM정규 표현식이 아닌 원하는 대로 수행하세요.

관련 정보