HTML에서 패턴으로 두 개의 문자열을 가져옵니다.

HTML에서 패턴으로 두 개의 문자열을 가져옵니다.
        <DL><p>
            <DT><A HREF="https://www.gnu.org/gnu/" ADD_DATE="1650679138" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQC
AIAAACQkWg2AAACoklEQVQ4jT2PP0hCURTGz729rKwEkR6CkdFreVQSWWGZVItYEA5CZEPQWCC0N4ZCRGNDQw05tCQtIq8peDSUEPZnyyGUCkSLHPIp9917Gh54ho8D349zvo9
wzimlX19f+Xy+2WyOjY0pimKz2SiliNhqtfL5/O/vbygUcrlcQgiCiJqmHRwcAIDX61VVdXV11e/3AwAA3Nzc5HK5t7e3RqOxv78fDofJz8/P7u7u9/f31dWVw+GoVqvFYhEAZ
Fn++PhwuVwTExMAsLOzUy6X0+k0lMvllZWVy8tLRCyVSrFYzLq9tbUVCAS6u7tPTk4Q8fHxcW5u7vX1VTJN0zCMv7+/Wq2WSCTu7+/j8biiKKqqRqPRdDqdSqUmJycZY61WizF
G7Xb74OBgMplcWlqKRCLPz89+v39zc1OWZavr9fX1+vr6xsbG6Oio2+0GzrmmaYFAYHZ2FhE555VKJRgMFgqFUqmkKAoi7u3tLSws6LrOOSdCCEKIruv1en1tbU3TtPHx8b6+P
gDo7++/uLjo7e2dnp4uFAqxWEwIIQkhKKWdnZ0OhyOTyfT09MiyLEnS4eHhwMBAJBJ5eXkpFoszMzNCCACQKKVCiGazmcvlgsHg8PCwzWZ7f3+PRqPVatXj8RiGwTkfGhrinHd
0dFBCCCIuLy+HQiGfz/fw8MAY6+rqqtfr8/Pzn5+f2WzW4/FYyRFRQkTridfrFUKMjIzc3t6Gw+FarXZ6esoYczqddrvdwgghlBBCCAEAVVUrlcri4mImkzk+Pvb5fE6n0zCMe
DxOKbVoAABEREQhBCI2Gg3TNHVdB4BsNnt2dvb09ISIjLE2A+3NUs45Y+z8/FySJAA4OjoSQpimabmIKAGA1aathJDt7W232313dzc1NdXObM0/+0mFhpRFricAAAAASUVORK5
CYII=">gnu/linux</A>
            <DT><A HREF="https://crontab.guru/" ADD_DATE="1651093395" ICON="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIA
AACQkWg2AAAB8UlEQVQ4jW2SXUjTURjGn+f4b0XKYrpBYG4j3HY1IpBRDgIJg4IRol304UVgF5kRQRBBEATVuvPOCPGmL+qiO7NMyCi7WMJKsLAbx/BmpEwNUUb8ny7+HzrocD
gczvk973nf5z2Mx9tIkHRWACQAkJQEQAIASRIkWT5tDHcK4MrhcAABAbRIGkNf5nOOxpPCtl2N5dDG0EHJ4MCdo70nWqOhAADALhfm7z6uXrzSNjk08bwCy6eNQeelrvvXUxFg
tVyZnl3bwJ50x4FoJj2aAbA6uUwSFunSuXt9+Z7wVnnx1tX3bxa3s788dmEw01gtLrwEABgSJCK5rnxP+PdM4UhuaqJEb4DkyLMlAF9f/HTIhnA4ZEx4+OmxaK18vndmjaA3na
KbmwINldLtJxXnTYtEpD+Tbaq9uva2tI0Bcp1amfv18LvvGwyA08f3o1p+9AE7DK0bXtcgwQAI7jWobq14TYUA91oSWlp2ux2XJBkAgV3Awdi5+kiSlE6MjA9Mfzx5yDsEYEmY
/bHen2q+WehrzX8ee10NpkOHO2Ldp9o7U43A5viDT9+88BKYSsVJDo2eHczuq0v872bh3dzwjWJRkmDbsm1JYjIZdyxvzybPdEdQq/1Z3liYX5r6su6X4aC2LQlMJGL/+3bwCn
Vpb4N/csD9UHGZQoAAAAAASUVORK5CYII=">Crontab</A>

gnu/linux https://www.gnu.org/gnu/예를 들어 설명과 href를 추출한 다음 dmenu에 전달하고 싶습니다 .

이렇게 개별적으로 얻을 수는 있지만 grep -o -P '(?<=">).*(?=</A>)' bookmark.html 결합 grep -o -P '(?<=HREF=).*(?= ADD)' bookmark.html하는 방법은 물론 sed나 awk를 사용하여 결합하는 방법도 모릅니다.

답변1

HTML을 XML로 변환한 다음 XML 인식 파서를 사용하여 관련 항목을 선택할 수 있습니다.

xmlstarlet format -H index.html 2>/dev/null |
    xmlstarlet select -T -t -m '//a' -v 'concat(., " ", @href)' -n 2>/dev/null

테스트할 때 예제 발췌문을 <root>... 에 래핑했지만 </root>이를 수행하기 위해 HTML을 사용할 필요는 없습니다. 결과는 한 줄에 각 필드 쌍이 공백으로 구분되어 출력됩니다.

gnu/linux https://www.gnu.org/gnu/
Crontab https://crontab.guru/

공백 없이 URL을 먼저 제공한 다음 설명을 제공하는 것이 더 나을 수도 있습니다. 또는 탭을 사용하여 필드를 구분하세요.

아직 설치하지 않은 경우 xmlstarlet표준 패키지에 포함되어 있으므로 설치가 매우 쉽습니다.

관련 정보