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
정규 표현식이 아닌 원하는 대로 수행하세요.