93578
Goto Top

Bash-Script um aus einer Textdatei alle HTML-Tags zu entfernen. Hilfe!

Hall an alle,

ich habe eine Textdatei (LF, Win-1252), die wie folgt aussieht:
<html>
<head>
<title>Test</title>
</head>
<body bgcolor=white leftmargin="0" topmargin="0" marginwidth="00" marginheight="0" class=NormalFont>  
<tr>
<td align=center><b>Date</b></td>
<td align=center><b>Total Hours</b></td>
</tr>
12345
asdfwf
asfs<fv
asdcf<>sd
<forum>
</table>
</body>
</html>

Dort will ich alle HTM-Tags entfernen.

Dazu habe ich folgendes Script gefunden ("web.sh"):

htmlTags="a|b|big|blockquote|body|br|center|code|del|div|em|font|h[1-9]|head|hr|html|i|img|ins|item|li|ol|option|p|pre|s|small|span|strong|sub|sup|table|td|th|title|tr|tt|u|ul"  
cat datei.txt | sed -r "s/<[^>]*>//g;s/^\w.*=\"\w.*\">//;s/^($htmlTags)>//I;s/<\/*($htmlTags)$//I;s/&amp;*/&/gI;s/&quot;/\"/gI;s/&apos;/'/gI;s/&apos;/'/gI;s/&lt;/</gI;s/&pound;/£/gI" > datei1.txt  

Am Ende will ich folgendes haben:

Test
Date
Total Hours
12345
asdfwf
asfs<fv
asdcf<>sd
<forum>

Stattdessen habe ich aber:

Test
Date
Total Hours
12345
asdfwf
asfs<fv
asdcfsd

Also in "asdcf<>sd" wird "<>" gelöscht. Und die Zeile <forum> wird auch komplett gelöscht.

Ich will aber solche Zeilen ja behalten! Es wurden doch in der ersten Zeile extra zu löschende HTML-Tags definiert. Warum werden dann andere Wörter in <> oder leere <> gelöscht? Wie kann man das korrigieren?

Content-Key: 343321

Url: https://administrator.de/contentid/343321

Printed on: April 26, 2024 at 09:04 o'clock

Mitglied: 133417
133417 Jul 13, 2017 updated at 13:09:31 (UTC)
Goto Top
<forum> 
Dir ist hoffentlich schon klar das wenn du eckige Klammern und andere Sonderzeichen nutzen willst das man diese im HTML-Code mit deren HTML-Entities so schreibt
&lt;forum&gt;
Damit sie eben nicht als Tags interpretiert werden können!

Gruß
Mitglied: 93578
93578 Jul 13, 2017 updated at 13:40:39 (UTC)
Goto Top
Ja, es ist mir klar.

Das ist nur ein Beispiel. In der Realität aber habe ich durchaus solche Wörter und möchte gerne sie auch so behalten (zusammen mit dazugehörigen eckigen Klammern). Man muss sich einfach von typischen HTML-Seite-Aufbau abstrahieren.

Es handelt hier nicht um eine HTML-Datei, sondern um eine Textdatei mit etlichen HTML-Code-Fragmenten/Tags, die ich gerne entfernen will.
Mitglied: 133417
Solution 133417 Jul 13, 2017 updated at 13:54:24 (UTC)
Goto Top
Logisch das das <forum> und das <> entfernt wird wenn du im sed-Regex diesen Abschnitt drin hast
s/<[^>]*>//g
Denn der entfernt ja alle Tags mit beliebigem oder ohne Inhalt.

Btw. sind das bei weitem nicht alle möglichen HTML-Tags. HTML5 erlaubt inzwischen auch eigens benannte Tags das nur zur Info, deswegen ist das Auflisten aller Tags hier eigentlich Müll.
Mitglied: 93578
93578 Jul 13, 2017 at 14:16:47 (UTC)
Goto Top
Danke! Jetzt hab ich es endlich kopiert.