Bash:
Tolka HTML

Hur man gör:

Bash är inte förstahandsvalet för att parsa HTML, men det kan göras med verktyg som grep, awk, sed, eller externa verktyg som lynx. För att vara robusta kommer vi att använda xmllint från libxml2-paketet.

# Installera xmllint om det behövs
sudo apt-get install libxml2-utils

# Exempel på HTML
cat > sample.html <<EOF
<html>
<head>
  <title>Exempelsida</title>
</head>
<body>
  <h1>Hej, Bash!</h1>
  <p id="myPara">Bash kan läsa mig.</p>
</body>
</html>
EOF

# Parsa Titeln
title=$(xmllint --html --xpath '//title/text()' sample.html 2>/dev/null)
echo "Titeln är: $title"

# Extrahera stycke efter ID
para=$(xmllint --html --xpath '//*[@id="myPara"]/text()' sample.html 2>/dev/null)
echo "Styckets innehåll är: $para"

Utdata:

Titeln är: Exempelsida
Styckets innehåll är: Bash kan läsa mig.

Fördjupning

Förr i tiden använde programmerare regex-baserade verktyg som grep för att skanna HTML, men det var klumpigt. HTML är inte reguljärt – det är kontextuellt. Traditionella verktyg missar detta och kan vara felbenägna.

Alternativ? Massor. Python med Beautiful Soup, PHP med DOMDocument, JavaScript med DOM-parsrar – språk med bibliotek designade för att förstå HTML:s struktur.

Att använda xmllint i bash-skript är solid för enkla uppgifter. Det förstår XML och därmed även XHTML. Vanlig HTML kan vara oförutsägbar, dock. Den följer inte alltid XML:s strikta regler. xmllint tvingar HTML in i en XML-modell vilket fungerar bra för välformulerad HTML men kan snubbla på röriga saker.

Se också