Anzeige:
Ergebnis 1 bis 7 von 7

Thema: sed: RegExp zum ersetzen von Zeichen außerhalb von HTML-Tags

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20

    Question sed: RegExp zum ersetzen von Zeichen außerhalb von HTML-Tags

    Hallo Community,

    ich möchte mit sed ne HTML-Datei in eine reine ASCII-Datei ändern.
    Dass die Umlaute u.ä. Zeichen ersetzt werden hab ich hinbekommen, nur bei der zusätzlichen Ersetzung der Anführungszeichen ( " ) durch " komme ich nicht voran.
    Code:
    sed 's/\"/\"/g'
    Ich bekomme einfach keinen regulären Ausdruck hin, sodass nach Anführungszeichen gesucht wird, die nicht in der Zeichenkette <.*> liegen.

    Gruß,
    crocodilechris

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.09.2005
    Beiträge
    61
    Hallo,

    nur so als Idee, vielleicht löst es deine Probleme viel einfacher:
    html2text - an advanced HTML-to-text converter
    Habe ich bei SUSE mit drauf.
    Gruss zst

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    mh, kommt leider nicht in Frage, brauch das distributionsunabhängig und ohne Fremdtools.
    Würde das eben gerne mit dem sed machen, oder nem anderen built-in-Tool, wenn sonst nicht möglich.
    Achso, außerdem soll es ja weiterhin ne html sein, nur eben rein ASCII-formatiert, ohne Umlaute und sowas.

    Ich hoffe darauf, dass es nen regulären Ausdruck dafür gibt, nur den bekomm ich leider nicht selber hin.

    Edit:
    vlt gibt es ja ne möglichkeit den Ausdruck, der die HTML-Tags rausfiltert aus dem gesuchten rauszunehmen:
    Code:
    (<[^>]*>)
    Geändert von crocodilechris (06-11-2009 um 22:14 Uhr)

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ich verwende für solche Geschichten immer xsltproc
    PHP-Code:
    < ? xml version '1.0' encoding 'utf-8' ? >
    <
    xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      
    xmlns:reg="http://exslt.org/strings"
      
    extension-element-prefixes="reg">

    <!-- 
    Undefined http://www.hjcms.de, (C) 2007-2010 -->

    <xsl:output version="1.0"
       
    method="xml"
       
    encoding="utf-8"
       
    indent="yes"
       
    media-type="application/xhtml+xml"
       
    doctype-system "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
       
    doctype-public = "-//W3C//DTD XHTML 1.0 Transitional//EN"
    />

    <
    xsl:template match="*" mode="txt">
      <
    xsl:variable name="tmp1" select="reg:replace(text(),'ä','ae')" />
      <
    xsl:variable name="tmp2" select="reg:replace($tmp1,'ö','oe')" />
      <
    xsl:variable name="tmp3" select="reg:replace($tmp2,'ü','ue')" />
      <
    xsl:value-of select="$tmp3/>
      <
    xsl:apply-templates select="*" mode="html" />
    </
    xsl:template>

    <!-- 
    Copy -->
    <
    xsl:template match="*" mode="html">
       <
    xsl:element name="{name()}">
          <
    xsl:for-each select="@*">
             <
    xsl:attribute name="{name()}">
                <
    xsl:value-of select="." />
             </
    xsl:attribute>
          </
    xsl:for-each>
          <
    xsl:choose>
            <
    xsl:when test="text()">
              <
    xsl:apply-templates select="." mode="txt" />
            </
    xsl:when>
            <
    xsl:otherwise>
              <
    xsl:apply-templates select="./*" mode="html" />
            </
    xsl:otherwise>
          </
    xsl:choose>
       </
    xsl:element>
    </
    xsl:template>

    <!-- 
    Main -->
    <
    xsl:template match="/">
      <
    xsl:apply-templates select="./*" mode="html" />
    </
    xsl:template>

    </
    xsl:stylesheet
    Code:
    xsltproc --output out.html strip2ascii.xslt input.html
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Ist das nicht nen bisschen viel Aufwand?
    Wie wärs mit folgenden Zeilen in ner Datei, die Dann beim sed als Skript-File angegeben wird:
    Code:
    # Umlaute konvertieren
    s/ä/\&auml;/g;
    s/Ä/\&Auml;/g;
    s/ö/\&ouml;/g;
    s/Ö/\&Ouml;/g;
    s/ü/\&uuml;/g;
    s/Ü/\&Uuml;/g;
    # S-Zet ersetzen
    s/ß/\&szlig;/g;
    # Anfuehrungszeichen ersetzen
    #s/>[^<]*\"</\&quot;/g;
    # ... e setzen
    s/\.\.\./\&hellip:/g
    Also wie folgt:
    Code:
    sed -f regeln input > output
    Und leider ersetzt deine Methode auch nicht die Anführungszeichen in &quot; oder?
    Außerdem sehe ich grad, dass das Programm auf dem Server wo ich es anwenden will garnicht drauf ist

  6. #6
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Zitat Zitat von crocodilechris Beitrag anzeigen
    Ist das nicht nen bisschen viel Aufwand?
    ..............
    Außerdem sehe ich grad, dass das Programm auf dem Server wo ich es anwenden will garnicht drauf ist
    1) Das was du jetzt möchtest ist nicht ASCII sondern "Spezial Entitiy Chars"
    2) Das ist ein Beispiel und nicht fertig, fertige Scripte gibt es nicht um sonst
    3) Wenn auf deinem Server keine libxslt Installiert ist wundert mich das. Ohne die geht so gut wie kaum etwas gnome,udev,docbook etc.

    Der Aufwand ist auch nicht mehr als bei deinem Scripts, mit dem zusatz das er dir alle html Seiten Sauber formatiert
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  7. #7
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Das sollte auf nem alten Unix-Server in der Uni laufen, ....
    Naja, habs aufgegeben die Anführungszeichen zu ersetzen, wenn ich im Laufe des Semesters noch ne Idee bekomme, dann werde ich die gefundene Lösung mal präsentieren, ...
    Solange versuch ich mich mit anderen Aufgaben fortzubilden, eventuell hilft die Distanz ja auch ne Lösung zu finden, oder die dann hoffentlich neu erworbenen Unix/Linux-Kenntnisse

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •