HTML의 태그 간 검색 패턴

HTML의 태그 간 검색 패턴

특정 제목이 있는 태그에서 값을 가져와야 합니다.

나에게는 이 명령이 있습니다.

sed -n 's/title="view quote">\(.*\)<\/a>/\1/p' index.html

index.html 의 일부입니다. "인생의 모든 것은 행운입니다"

<a title="view quote" href="https://www.brainyquote.com/quotes/donald_trump_106578" class="oncl_q">
<img id="qimage_106578" src="./Donald Trump Quotes - BrainyQuote_files/donaldtrump1.jpg" class="bqphtgrid" alt="Everything in life is luck. - Donald Trump">
</a>
</div>
<a href="https://www.brainyquote.com/quotes/donald_trump_106578" class="b-qt qt_106578 oncl_q" title="view quote">Everything in life is luck.</a>
<a href="https://www.brainyquote.com/quotes/donald_trump_106578" class="bq-aut qa_106578 oncl_a" title="view author">Donald Trump</a>
</div>
<div class="qbn-box">
<div class="sh-cont">
<a href="https://www.brainyquote.com/share/fb/106578" aria-label="Share this quote on Facebook" class="sh-fb sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/facebook-f.svg" alt="Share on Facebook" class="bq-fa"></a><a href="https://www.brainyquote.com/share/tw/106578?ti=Donald+Trump+Quotes" aria-label="Share this quote on Twitter" class="sh-tw sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/twitter.svg" alt="Share on Twitter" class="bq-fa"></a><a href="https://www.brainyquote.com/share/li/106578?ti=Donald+Trump+Quotes+-+BrainyQuote" aria-label="Share this quote on LinkedIn" class="sh-tw sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/linkedin-in.svg" alt="Share on LinkedIn" class="bq-fa"></a>
</div>
</div>
<div class="qll-dsk-kw-box">
<div class="kw-box">
<a href="https://www.brainyquote.com/topics/life-quotes" class="qkw-btn btn btn-xs oncl_klc" data-idx="0">Life</a>
<a href="https://www.brainyquote.com/topics/luck-quotes" class="qkw-btn btn btn-xs oncl_klc" data-idx="1">Luck</a>
<a href="https://www.brainyquote.com/topics/everything-quotes" class="qkw-btn btn btn-xs oncl_klc" data-idx="2">Everything</a>
</div>
</div>
</div>
<div id="qpos_1_2" class="m-brick grid-item boxy bqQt r-width" style="position: absolute; left: 623px; top: 2px;">
<div class="clearfix">
<div class="qti-listm">
<a title="view quote" href="https://www.brainyquote.com/quotes/donald_trump_119339" class="oncl_q">
<img id="qimage_119339" src="./Donald Trump Quotes - BrainyQuote_files/donaldtrump1(1).jpg" class="bqphtgrid" alt="The first thing the secretary types is the boss. - Donald Trump">
</a>
</div>
<a href="https://www.brainyquote.com/quotes/donald_trump_119339" class="b-qt qt_119339 oncl_q" title="view quote">The first thing the secretary types is the boss.</a>
<a href="https://www.brainyquote.com/quotes/donald_trump_119339" class="bq-aut qa_119339 oncl_a" title="view author">Donald Trump</a>
</div>
<div class="qbn-box">
<div class="sh-cont">
<a href="https://www.brainyquote.com/share/fb/119339" aria-label="Share this quote on Facebook" class="sh-fb sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/facebook-f.svg" alt="Share on Facebook" class="bq-fa"></a><a href="https://www.brainyquote.com/share/tw/119339?ti=Donald+Trump+Quotes" aria-label="Share this quote on Twitter" class="sh-tw sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/twitter.svg" alt="Share on Twitter" class="bq-fa"></a><a href="https://www.brainyquote.com/share/li/119339?ti=Donald+Trump+Quotes+-+BrainyQuote" aria-label="Share this quote on LinkedIn" class="sh-tw sh-grey" target="_blank" rel="nofollow"><img src="./Donald Trump Quotes - BrainyQuote_files/linkedin-in.svg" alt="Share on LinkedIn" class="bq-fa"></a>
</div>
</div>

Bash에서 배열을 채우려면 이 모든 값이 필요합니다. 여기서 예상되는 출력은 ['인생의 모든 것은 행운이다', '비서가 가장 먼저 들어가는 것은 상사이다. ']. 하지만 index.html에는 모든 따옴표가 필요하므로 모든 따옴표를 배열로 가져오려면 선택기가 필요합니다.

답변1

HTML이고 적절한 XML이 아니더라도 실제로는 xmlstarlet.

파일을 호출해 보겠습니다 index.html. 명령 호출:

xmlstarlet fo -H index.html 2>/dev/null |
    xmlstarlet sel -t -v '//a[@title="view quote" and string-length(text()) > 1]' -n 2>/dev/null

산출:

Everything in life is luck.
The first thing the secretary types is the boss.

당신은 이전에 그것을 경험하지 않았을 수도 있습니다 xmlstarlet. XML 형식을 지정하고, 편집하고, 구문 분석할 수 있는 놀라운 도구입니다. 오늘 나는 이것이 잘못된 HTML 형식을 다시 지정할 수도 있다는 것을 발견했습니다. 그렇지 않은 경우 설치하십시오. (설치 권한이 없는 경우 문의하시기 바랍니다.) 처리를 시작할 수 없는 방식으로 sedXML을 이해합니다 awk. XML을 다시 포맷하시겠습니까? 깨질 가능성이 높지만 sed큰 차이는 보이지 않습니다.awkxmlstarlet

관련 정보