schnipp-schnapp mit sed?

X

xeeen

Mitglied
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
 
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.
 
Zuletzt bearbeitet:
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...
 
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
 
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...
 
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..
 
Zuletzt bearbeitet:
danke wolfgang,

version kann ich leider atm nicht rausfinden. shell ist die ksh unter aix.
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.
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...
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
 
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!
 
kann ich das 'sed -e ..blub.. infile' auch hinter ne pipe stellen? also cat infile | sed -? ...
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

un noch was: wie kann ich die allerletzte zeile löschen, ganz gleich, was da drinne steht?
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..
 
ok das hat mich überzeugt.
kann ich das 'sed -e ..blub.. infile' auch hinter ne pipe stellen? also cat infile | sed -? ...
Du kannst sed selbstverständlich in eine Pipe setzen.
Aber ein cat sed -e '...' ist sinnfrei (UUOC).
un noch was: wie kann ich die allerletzte zeile löschen, ganz gleich, was da drinne steht?

vielen dank!
Letzte Zeile nicht ausgeben (hier löschen im Datenstrom -> d)
Code:
sed -e '$d' input >outfile

Wolfgang
 

Ähnliche Themen

Textdatei filtern und löschen mit grep /sed

Suchen und ersetzen in HTML Dokumenten

Textdatei manipulieren mittels sed

div. Fragen zur Gestaltung

"Richtiges" Webdesign

Zurück
Oben