schnipp-schnapp mit sed?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von xeeen, 28.04.2008.

  1. xeeen

    xeeen Mitglied

    Dabei seit:
    24.04.2007
    Beiträge:
    32
    Zustimmungen:
    0
    hi,
    ich schreibe einen ora-sql output in eine datei.
    der inhalt sieht sinngemäß so aus:

    sp_name1
    ---------------------------------------------

    122231
    ABC123
    BAC123
    CBA123

    sp_name2
    ---------------------------------------------

    ABC123
    BAC123
    CBA123
    AAC213
    AC2312

    usw. mit variabler spaltenzahl. also mal 3, mal mehr mal weniger mit mal mehr oder weniger datensätzen.

    ich würde diesen output in der datei gerne dahingehend bearbeiten, das lediglich die Datensätze wie zb. ABC123 übrig bleiben und der rest der dateivollständig entfernt wird.

    könnte ich bitte ein paar tipps bekommen, wie ich das umsetzen kann?!

    danke
     
  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. #2 Herr Nilsson, 28.04.2008
    Zuletzt bearbeitet: 28.04.2008
    Herr Nilsson

    Herr Nilsson Eroberer

    Dabei seit:
    21.03.2008
    Beiträge:
    62
    Zustimmungen:
    0
    Ort:
    Dortmund
    Wäre es nicht einfacher, von SQL die gewünschten Zeilen auswählen zu lassen?

    Falls nach einem Ausdruck oder Muster gesucht werden soll, wäre ansonsten grep die erste Wahl, z.B. grep ABC123 Dateiname.
     
  4. xeeen

    xeeen Mitglied

    Dabei seit:
    24.04.2007
    Beiträge:
    32
    Zustimmungen:
    0
    danke für deine anregung, ich brauche es aber allerdings tatsächlich wie beschrieben- und kein work-around. ;)

    grep kann hier nicht helfen, da ich eine datei editieren möchte...
     
  5. #4 Wolfgang, 28.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Welche Shell und welches sed verwendest du?
    Mit GNU sed geht es mit der Option -i.
    Code:
    sed -i -e '/ABC123/!d' input.
    
    Wolfgang
     
  6. xeeen

    xeeen Mitglied

    Dabei seit:
    24.04.2007
    Beiträge:
    32
    Zustimmungen:
    0
    danke wolfgang,

    version kann ich leider atm nicht rausfinden. shell ist die ksh unter aix.

    mit deinem lösungsansatz müsste ich aber auch alles explizit definieren, was rausgeschnipselt werden soll?!

    sinniger wärs doch umgekeht, so ist man flexibler.
    also alles weg raus 'sp_namex' und '-' bzw. leere zeilen sind...
     
  7. #6 Gott_in_schwarz, 28.04.2008
    Zuletzt bearbeitet: 28.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    sed -e '/sp_name[0-9]\|-\|^$/d' infile
    D:

    edit: und NATÜRLICH hätte man das mit grep machen können...
    Code:
    egrep -v '^(sp_name[0-9])?$|-' infile > outfile
    und dann noch ein beherztes "mv outfile infile" und alles ist toll..
     
  8. #7 Wolfgang, 28.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Siehst du, deshalb ist es sinnvoll Das hier zu beherzigen
    IMHO ist unter AIX per default kein GNU sed verfügbar.
    Dann musst du eben mit temporären Dateien arbeiten.
    Ob du nun mit grep oder sed arbeitest, ist deine Sache.
    Das eindeutige Muster solltest du aber kennen.
    Unsereiner kann das ja nicht wissen. ;)

    Vorschläge hast du ja nun genug bekommen.
    Zu sed gibt es übrigens gute Erklärungen im Netz - falls die manpage mal nicht ausreicht. ;)

    Gruß Wolfgang
     
  9. xeeen

    xeeen Mitglied

    Dabei seit:
    24.04.2007
    Beiträge:
    32
    Zustimmungen:
    0
    ok das hat mich überzeugt.
    kann ich das 'sed -e ..blub.. infile' auch hinter ne pipe stellen? also cat infile | sed -? ...

    un noch was: wie kann ich die allerletzte zeile löschen, ganz gleich, was da drinne steht?

    vielen dank!
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 Gott_in_schwarz, 28.04.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ja, das kannst du.
    Code:
    echo "foo"|cat|cat|cat|sed -e 's/foo/bar/'|cat|cat|xargs echo|sed -e 's/bar/foo/'|cat|cat|cat
    Zum Beispiel mit der Adresse "$" in sed. (Steht für letzte Zeile afair.)
    Code:
    sed -e '$d' infile
    oder mit head:
    Code:
    head -n -1 infile
    und auch da kannst du natürlich alles mit cat vollspammen..
     
  12. #10 Wolfgang, 28.04.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Du kannst sed selbstverständlich in eine Pipe setzen.
    Aber ein cat sed -e '...' ist sinnfrei (UUOC).
    Letzte Zeile nicht ausgeben (hier löschen im Datenstrom -> d)
    Code:
    sed -e '$d' input >outfile
    
    Wolfgang
     
Thema:

schnipp-schnapp mit sed?