Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Mehrzeiligen text mit Bash...

  1. #1
    Registrierter Benutzer
    Registriert seit
    19.08.2005
    Beiträge
    18

    Unhappy Mehrzeiligen text mit Bash...

    So,

    nachdem in einem Konkurrenzforum keiner darauf geantwortet hat, hab ich euer Forum entdeckt und poste mal hier.

    Ziel ist es, aus einer Datei mehrzeilige texte herauszulösen. (Es handelt sich um HTML-Dateien, aber es ist ja auchegal.)

    In einer Tabelle sind dort mehrere Zellen untereinander angeordnet und ich möchte die texte zwischen den Zeichen <td class="general"> und </td> rauslösen. Das sind oft Mehrzeiler. Außerdem in einer for-Schleife alles durchgehen und beim ersten Durchlauf nur das erste finden, beim zweiten das zweite und so fort. (Das könnte man notfalls so machen, dass man in einer temporären Datei nach jedem Fundstück den ersten Teil herausschneidet, damit dieser nicht mehr gefunden wird,.)

    Also aus so nem Ausschnitt

    Code:
    <tr>
    <td class="general">
    Dies ist ein Text
    </td>
    </tr>
    <tr>
    <td class="general">
    Windows ist net so gut
    </td>
    </tr>
    <tr>
    <td>
    Das sollte nicht gefunden werden</td>
    </tr><tr>
    <td class="general">Linux
    ist
    S U P E R !!!</td></tr>
    bei den drei Durchgängen die Zeilen

    Dies ist ein Text

    Windows ist net so gut

    Linux
    ist
    S U P E R !!!

    gefunden werden. (Die Zahl der Durchgänge sollte variabel sein, aber dasa its kein Problem.)

    In einem zweiten Schritt könnte ich dann noch die Zeilenumbrüche filtern, weil ich für ein Skript in eine Datendatei EINE Zeile mit dem Code schreiben muss. (Da sich HTML aber nicht um newline-Zeichen kümmert, kann man diese getrost durch Leerezeichen ersetzn.)

    Also kurzum: Texte zwischn <td class="general"> und </td> finden, alle einzeln + Zeilenumbrüche weg. (´Letzteres ist mit SED gut zu erledigen.)

    - penma -

  2. #2
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Also ich würde erst die Zeilenumbrüche wegmachen und dann mit Perl drauf los.

    Sed passt leider nicht so gut, da sie RegExps in Sed immer "greedy" sind - d.h. sie matchen z.B. das erste <td> und dann das letzte </td> und nicht das nächste wie du das möchtest - bei Perl kannst du dieses Verhalten afair einstellen.

    Wie das dann genau in Perl aussehen würde kann ich dir auch nicht sagen - hab das schon zu lange nicht mehr verwendet. Musst dich halt etwas einlesen

    Hier
    http://www.ebb.org/PickingUpPerl/
    gibts z.B. ein Tutorial-Buch zum lesen. k.A. wie gut das ist aber die Inhaltsübersicht sieht schon mal nicht schlecht aus.

    Ich glaube in Sed hatte ich vor einiger Zeit auch mal was im Forum gepostet das was in die Richtung tat - zumindest mit HTML-Tags und so. War aber ultramerkwürdig - wie halt sed-Scripts so zu werden pflegen wenns kompliziert wird.

    MfG Peschmä
    Geändert von peschmae (20-08-2005 um 22:48 Uhr)
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.08.2005
    Beiträge
    18
    Hmm, okay, aber mit Perl hab ich nie programmiert. Wäre aber auch kein Problem, das mit der Bash zu benutzn oder dann alles auf Perl umzustellen. Hauptsache, ich krieg aus einer - das soll der Einsatzzweck sein - HTML-Seite von einem Forum eine datei im folgenden Stil heraus:

    Code:
    Seitentitel (TITLE-Tag), aber ohne Forenname
    <<<Beiträge hintereinander>>>
    Autor
    Erstellt am
    HTML-Code (eine Zeile)
    <<<Wiederholen für alle Beiträge>>>
    Das System, wo diese Einträge herauszulösen sind, ist mir bereits klar. Also muss das Skript die folgenden inträge durch zeilenumbrüche getrennt in eine Dtei schreiben:

    Text zwischen <title> und </title> (10 Zeichen vom Anfang aber wegnehmen)
    Text nach "von " bis zum nächsten Leerzeichen
    text nach "erstellt am " (es folgt ein Datum) sagen wir mal bis zum </td>
    Tetx zwischen <td class="general"> und </td> in EINER ZEILE
    2.-4. Schritt wiederholen, bis kein Fundstück mehr.

    Anschließend (besser als zweites Skript) folgendes mit erzeugter Datei machen:
    Gesamtzahl Beiträge zählen (Anzahl nicht leerer Zeilen minus 1, es wird die Titelzeile ausgenommen)
    Bestimmten fest eingebauten text an den Output schreiben
    Erste Zeile einlesen und n den Output (in bash macht man das gut mit cat << EOF >> textdatei)
    weiteren eingebauten Text an den Output
    schleife: von 1 bis Gesamtzahl Beiträge
    {
    Festen Text an Output
    Erste Zeile eines Blocks (ein B lock besteht aus Autor, Erstellungsdatum und HTML-Code) an Output
    Fester text an den Output
    Zweite Zeile vom Block an Output
    fester Text
    Dritte Zeile
    fester Texzt an Output
    } (schleife ende)
    fester text an output

    Weiß nicht, hört sich bestimmt kompliziert an, aber sagen wir mal so etwas in der Datei vom ersten Skript:

    Code:
    Mehrzeiligen text mit Bash...
    LsSuper2004
    20.08.2005 17:59
    So, <br><br>nachdem ich in einem Konkurrenzforum (und so weiter)
    peschmae
    20.08.2005 22:46
    Also ich würde erst die Zeilenumbrüche (...)
    LSsuper2004
    21.08.2005 14:28
    Hmm, okay, aber mit Perl hab ich noch nie programmiert. (...)
    Hoffe es wird jetzt klarer, das wäre jetzt das Ergebnis für dieses Forum und diese Beiträge hier. Also so in dem Stil.

    - penma -

Lesezeichen

Berechtigungen

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