sed

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
rainer.arnst
Beiträge: 74
Registriert: 25.09.2003 11:03:05
Wohnort: Berlin
Kontaktdaten:

sed

Beitrag von rainer.arnst » 10.10.2003 16:28:25

Hallo,

falls ein sed-Experte anwesend ist, bitte meldet Euch :).

Der Inhalt einer jeden Zeile eines Text-Files soll dupliziert werden (plus ein Zeichen dazwischen). So:

Input-File:
11
22
33

Output-File:
11 11
22 22
33 33

Vielen Dank...
Rainer

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 10.10.2003 16:50:46

Code: Alles auswählen

sed -e 's/.*/& &/'
würde ich da mal probieren..

Benutzeravatar
rainer.arnst
Beiträge: 74
Registriert: 25.09.2003 11:03:05
Wohnort: Berlin
Kontaktdaten:

Beitrag von rainer.arnst » 10.10.2003 17:12:46

Vielen Dank. Es geht!!

(Wenn ich auch nicht weiss, warum... :) ).

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 10.10.2003 17:29:23

Naja, 's/foo/bar/' ersetzt das zwischen dem ersten und zweiten Schrägstrich durch das zwischen dem zweiten und dritten. Also hier 'foo' durch 'bar'.
's/.*/& &/' ersetzt dann folglich eine beliebige Anzahl von Zeichen auf einer Zeile (symbolisiert durch regexp '.*') durch sich selbst (&), gefolgt von einem Leerzeichen und noch einmal sich selbst.. :)

Benutzeravatar
blaubaer
Beiträge: 417
Registriert: 20.02.2003 13:57:01
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blaubaer » 10.10.2003 18:24:47

Kann man mit sed (oder mit einem anderen Kommando) eigentlich auch Zeilen löschen? Bspw sollen alle Zeilen eines Textes gelöscht werden die mit "foo" anfangen.
Blaubär

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 10.10.2003 18:35:46

Klar. Geht mit grep

Code: Alles auswählen

egrep -v '^foo'
grep -Ev '^foo'
oder sed

Code: Alles auswählen

sed -e 's/^foo.*//'
oder perl

Code: Alles auswählen

cat datei | perl -e 'while(<>) { print $_ if(!/^foo/) }'
mit awk, würde das wohl auch gehen.. oder mit einem Haufen anderer Tools.
Ist doch schön, daß man die Freiheit hat selbst zu wählen, wie man es macht :)

Benutzeravatar
blaubaer
Beiträge: 417
Registriert: 20.02.2003 13:57:01
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blaubaer » 11.10.2003 10:40:30

danke
Das sind ja gleich vier Dinge auf einmal- Spiel, Spannung, Schokolade und ... ;-)
Blaubär

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 11.10.2003 13:31:25

Tja, die Open-Source Welt steckt voller Überraschungen ;)

Antworten