SED letzte Zeile löschen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von fwalser, 09.01.2013.

  1. #1 fwalser, 09.01.2013
    Zuletzt bearbeitet: 09.01.2013
    fwalser

    fwalser Grünschnabel

    Dabei seit:
    08.01.2013
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo,

    habe ein Problem mit folgendem sed Befehl

    sed -n '/regexp1/,/regexp2/p'
    # gibt den inhalt zwischen regexp1 und regexp2 an inklusive regexp1 + regexp2.

    Nun benutz ich diesen sed Befehl um bestimmte Teile aus einer HTML Seite zu lesen
    und lösche anschliessend mit einem weieren sed Befehl alle HTML-Tags raus.

    Das Problem an der ganzen Sache ist nur, dass ich die letzte Zeile nicht brauch bzw. es eigentlich lauten müsste
    Ausgabe von einschliesslich. regexp1 bis ausschliesslich regexp2.

    Das ganze hab ich auch mit awk versucht:
    awk '/regexp1/ {flag=1;next} /regexp2/ {flag=0} flag {print}
    Problem hier ist, er zeigt zwar alles dazwischen an aber die Zeile 1 mit dem regexp1 fehlt dann :/ bzw. wird dann immer geschluckt.


    hab schon rumprobiert '$d' einzubauen usw. aber das will nicht so recht.
    Desweiteren hab ich mein Glück mit head/tail -n -1 ... versucht.

    Wenn ich das wie oben probiere ist das Problem, dass nur einmal die Zeile ganz am schluss weggeschnitten bzw. gelöscht wird aber nicht ein weiteres mal (davor, danach wie auch immer).

    Jemand ne idee, was ich da noch hinzufügen muss bzw. wie der sed Befehl richtig lauten würde ?
    Über Hilfe würde ich mich freuen.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    Hallo,
    keine schöne Lösung, aber als Notlösung: einfach mit sed die letzte Zeile löschen (per sed '$d'), an Deinen sed-Befehl anhängen (mit -e oder PIPE).
    Gruß zst
     
  4. #3 fwalser, 10.01.2013
    Zuletzt bearbeitet: 10.01.2013
    fwalser

    fwalser Grünschnabel

    Dabei seit:
    08.01.2013
    Beiträge:
    7
    Zustimmungen:
    0
    Hi und danke erstmal für die Antwort.
    Das Problem an der ganzen Sache ist folgendes. (Hab es oben schon probiert zu erklären, evtl. ein wenig umständlich ;) ) naja ich versuchs mal bisschen zu veranschaulichen .

    Ausgabe aktuell:
    Bedeutungen:
    [1] Compact Disc
    [2] Demokratische Republik Kongo
    Synonyme: <----- unerwünschte Zeile
    Bedeutungen:
    [1] Cluster of differentiation
    [2] Corps Diplomatique
    [3] Corporate Design
    Gegenwörter: <----- unerwünschte Zeile
    Bedeutungen:
    [1] Compact Disc
    [2] Corps Diplomatique
    Beispiele: <----- unerwünschte Zeile

    Ausgabe gewünscht
    Bedeutungen:
    [1] Compact Disc
    [2] Demokratische Republik Kongo
    Bedeutungen:
    [1] Cluster of differentiation
    [2] Corps Diplomatique
    [3] Corporate Design
    Bedeutungen:
    [1] Compact Disc
    [2] Corps Diplomatique

    Ausgabe mit deinem Vorschlag:
    Bedeutungen:
    [1] Compact Disc
    [2] Demokratische Republik Kongo
    Synonyme: <----- unerwünschte Zeile
    Bedeutungen:
    [1] Cluster of differentiation
    [2] Corps Diplomatique
    [3] Corporate Design
    Gegenwörter: <----- unerwünschte Zeile
    Bedeutungen:
    [1] Compact Disc
    [2] Corps Diplomatique

    D.h. er durchsucht bei mir eine Internetseite z.b. nach dem Regulären Ausdruck "Bedeutungen:" nimmt alles zwischen Bedeutungen und einem HTML-Tag und gibt leider die letzte Zeile in der das HTML Tag war mit aus.
    In dem Fall .z.b. 1x Synonyme, 1x Gegenwörter und Beispiele. Versuche ich nun jeweils die letzte Zeile eines "blocks" zu löschen wird mit sed '$d' jedoch nur die allerletzte Zeile gelöscht und nicht die anderen.
    Ich hoffe es ist verständlich.
     
  5. #4 Aqualung, 10.01.2013
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
    egrep

    Falls Du hinreichende alternative regexps für Deine gewünschten Zeilen finden kannst, sollte egrep bzw. "grep -e" Dein Freund sein:


    Code:
    grep -e '^Bed\|^\[[1-9]' test.txt 
     
  6. zst

    zst Foren As

    Dabei seit:
    06.09.2006
    Beiträge:
    95
    Zustimmungen:
    0
    oder eben "grep -v"
     
  7. #6 fwalser, 10.01.2013
    fwalser

    fwalser Grünschnabel

    Dabei seit:
    08.01.2013
    Beiträge:
    7
    Zustimmungen:
    0
    danke werde mein glück probieren ;)
     
  8. doc

    doc Kaffeetrinker

    Dabei seit:
    26.08.2006
    Beiträge:
    586
    Zustimmungen:
    0
    Ort:
    bremen
    Code:
    sed -n '/regexp1/,/regexp2/{/regexp2/!p}'
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 fwalser, 12.01.2013
    fwalser

    fwalser Grünschnabel

    Dabei seit:
    08.01.2013
    Beiträge:
    7
    Zustimmungen:
    0
    da erhalt ich dann das selbe wie wenn ich
    awk '/regexp1/ {flag=1;next} /regexp2/ {flag=0} flag {print} nutzen würde... hab nun einen mix aus sed und awk
    mein zusätzlicher awk teil lautet wie folgt :
    awk '! /regexp/ || /regexp/ {print $0}'
     
  11. #9 doc, 13.01.2013
    Zuletzt bearbeitet: 13.01.2013
    doc

    doc Kaffeetrinker

    Dabei seit:
    26.08.2006
    Beiträge:
    586
    Zustimmungen:
    0
    Ort:
    bremen
    also bei mir funktionierts: gnu sed 4.2.2 in der bash; zumindest funktionierts so wie ichs verstanden habe :P

    Code:
    doc@chaos:/tmp$ cat test 
    Bedeutungen: 
     [1] Compact Disc
     [2] Demokratische Republik Kongo
     Synonyme: <----- unerwünschte Zeile
     Bedeutungen:
     [1] Cluster of differentiation
     [2] Corps Diplomatique
     [3] Corporate Design
     Gegenwörter:  <----- unerwünschte Zeile
     Bedeutungen:
     [1] Compact Disc
     [2] Corps Diplomatique
     Beispiele: <----- unerwünschte Zeile
    doc@chaos:/tmp$ sed -n '/Bedeutungen:/,/unerwünschte Zeile/{/unerwünschte Zeile/!p}' test 
    Bedeutungen: 
     [1] Compact Disc
     [2] Demokratische Republik Kongo
     Bedeutungen:
     [1] Cluster of differentiation
     [2] Corps Diplomatique
     [3] Corporate Design
     Bedeutungen:
     [1] Compact Disc
     [2] Corps Diplomatique
    mit awk funktioniert es bei mir im übrigen so:

    awk '/Bedeutungen:/ {flag=1} /unerwünschte Zeile/ {flag=0} flag {print}'
     
Thema: SED letzte Zeile löschen
Besucher kamen mit folgenden Suchen
  1. sed letzte zeile loeschen

    ,
  2. sed letzte zeile löschen

    ,
  3. awk letzte zeile

    ,
  4. sed letzte zeile,
  5. unix sed letzte zeile loschen,
  6. sed zeile löschen,
  7. linux letzte zeile wegschneiden,
  8. sed alles bis auf letzte Zeile löschen,
  9. linux sed letzte zeile löschen,
  10. linux sed lösche zeile
Die Seite wird geladen...

SED letzte Zeile löschen - Ähnliche Themen

  1. 3 letzte Zeile löschen oder ab Zeile 55 Muster suchen und löschen

    3 letzte Zeile löschen oder ab Zeile 55 Muster suchen und löschen: Hallo, ich bin neu, mache aktuell privat ein wenig mit sed herum, da ich aktuell bei ca. 6500 Dateien HTML Code abändern will. Eine Anforderung...
  2. abschneiden nach letztem Zeichen einer Zeile

    abschneiden nach letztem Zeichen einer Zeile: Hallo, ich möchte nach dem letzten Zeichen einer Zeile [0-9 oder A-Z] mögliche Leerzeichen entfernen. Beispiel aus: ADASDF_ASDFASDF____ (...
  3. Textfile mit Text separiert durch Leerzeile, wie letzten Text rausbekommen?

    Textfile mit Text separiert durch Leerzeile, wie letzten Text rausbekommen?: Hi, wie geschrieben, ich habe ein Textfile, welches quasi so aussieht: Text text text text text text text letzter text bevor...
  4. Letzte Zeile eines Treffers ausgeben

    Letzte Zeile eines Treffers ausgeben: Hi Zusammen, kennt jemand einen weg um sich die letzte Zeile eines Treffers beim Suchen eines strings aus einer Textdatei ausgeben...
  5. Letzten Zeilen einer Datei löschen

    Letzten Zeilen einer Datei löschen: Hallo Leute, ich habe eine riesige Datei (ca. 300 MB) und möchte die letzten Zeilen löschen. Leider kann man aufgrund der Größe der Datei diese...