Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 08:25:07
Hallo,
und mal wieder eine Frage zu sed. Ich habe in einer Ausgabe mehrere sed-Befehle mit -e angebeben. Die Ausgabe sieht soweit auch ganz gut, nur dass zu viele "Sachen" ausgegeben werden.
Von dieser Ausgabe möchte ich alles nicht ausgeben, in den das Wort "queue" vorkommt. Ok, könnte es mit grep -v realisieren, aber wenn ich schon einmal mit sed dran bin, hätte ich es auch gerne damit realisiert.
Habe mir dazu den Link [1] angeschaut. Aber irgendwie verstehe ich es wohl nicht richt.
Dachte, dass es so funktionieren sollte (was aber nicht funktioniert):
[1]
http://www.tty1.net/sed-tutorium/html/ar01s09.html
Oh, yeah!
-
Savar
- Beiträge: 7174
- Registriert: 30.07.2004 09:28:58
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Berlin
Beitrag
von Savar » 26.02.2008 09:57:26
-e '/queue/d'
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 10:33:54
Ok, stimmt. So geht es auch. Einfach die Zeilen löschen.
Aber laut Anleitung des Links oben, sollte es doch auch irgendwie mit dem !-Zeichen funktionieren.
Oh, yeah!
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 26.02.2008 11:09:39
mit '!' gehts natürlich auch
Code: Alles auswählen
gms2 ~ # echo -e "bla\nqueue\nquak" | sed -e '/queue/d'
bla
quak
gms2 ~ # echo -e "bla\nqueue\nquak" | sed -ne '/queue/!p'
bla
quak
( in diesem Beispiel, sehe darin allerding keine Vorteile )
Gruß
gms
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 12:01:23
Ok, hatte wohl das -n zum Unterdrücken der normalen Ausgabe auf stdout vergessen.
Wie kann ich denn nochmal in einem substitude zuerst nach einem Pattern suchen und anschließend für die gefundenen Patterns die substitution ausführen?
Oh, yeah!
-
Meillo
- Moderator
- Beiträge: 9254
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 26.02.2008 12:16:47
Duff hat geschrieben:Wie kann ich denn nochmal in einem substitude zuerst nach einem Pattern suchen und anschließend für die gefundenen Patterns die substitution ausführen?
Use ed once in a while!
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 12:26:16
Ok, da musst man dann auch wieder den Schalter -n verwenden und am Ende der Ersetzung ein p für print.
Und wenn die Suche 2 Patterns entsprechen soll?
Oh, yeah!
-
gms
- Beiträge: 7798
- Registriert: 26.11.2004 20:08:38
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von gms » 26.02.2008 12:34:28
Code: Alles auswählen
gms2 ~ # echo -e "bla\nqueue\nquak" | sed -ne '/q/!n;/k/ s/a/ic/p'
quick
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 12:42:57
Wahnsinn....
Es werden nun hier alle Zeilen eingelesen, die kein q enthalten (/q/!) und danach werden alle Zeilen dem Suchpattern (n) angehangen (Treffer von /k/).
Wird hier wirklich nur bis zum ersten Treffer von q gesucht, also queue?
Wieso wird das bla nicht mehr mit ausgegeben?
Oh, yeah!
-
Meillo
- Moderator
- Beiträge: 9254
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 26.02.2008 13:27:45
Duff hat geschrieben:Und wenn die Suche 2 Patterns entsprechen soll?
Formuliere das Pattern so, dass es beide Fälle abdeckt (z.B. 'aa|bb')
Use ed once in a while!
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 14:15:26
Sorry, aber bei mir funktioniert das so nicht.
Steht das |-Zeichen nicht normalerweise für ein ODER?
Oh, yeah!
-
Meillo
- Moderator
- Beiträge: 9254
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 26.02.2008 14:32:24
Duff hat geschrieben:Steht das |-Zeichen nicht normalerweise für ein ODER?
*kK*
Use ed once in a while!
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 26.02.2008 16:11:02
Bitte was?
Oh, yeah!
-
Meillo
- Moderator
- Beiträge: 9254
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 26.02.2008 16:22:50
Duff hat geschrieben:Bitte was?
na, du hast natürlich recht. Mein Kommentar war nicht allzu sinnvoll.
Aber ich habe mir überlegt, dass du da vielleicht was schachteln könntest.
Hab's gerade ausprobiert, und es funktioniert
Code: Alles auswählen
< pantheon | meillo | /tmp >
$ cat text
3 aa laber
3 bb laber
3 aa laber
4 aa laber
4 bb laber
4 cc laber
< pantheon | meillo | /tmp >
$ cat text | sed '/3/ { /bb/s/laber/blubb/ }'
3 aa laber
3 bb blubb
3 aa laber
4 aa laber
4 bb laber
4 cc laber
Use ed once in a while!
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 27.02.2008 08:43:01
Mmh...danke.
Unter debian funktioniert es so bzw. wird kein Fehler gemeldet. Führe ich den Befehl allerdings unter HP-UX aus, bekomme ich immer die Fehlermeldung
Oh, yeah!
-
Meillo
- Moderator
- Beiträge: 9254
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 27.02.2008 08:58:21
Duff hat geschrieben:Unter debian funktioniert es so bzw. wird kein Fehler gemeldet. Führe ich den Befehl allerdings unter HP-UX aus, bekomme ich immer die Fehlermeldung
liegt vermutlich daran, dass nur gsed weitere Adressen in geschweiften Klammern erlaubt. Bei den anderen seds werden da wohl nur Befehle erlaubt sein.
Use ed once in a while!
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 27.02.2008 09:03:49
Meillo hat geschrieben:Duff hat geschrieben:Unter debian funktioniert es so bzw. wird kein Fehler gemeldet. Führe ich den Befehl allerdings unter HP-UX aus, bekomme ich immer die Fehlermeldung
liegt vermutlich daran, dass nur gsed weitere Adressen in geschweiften Klammern erlaubt. Bei den anderen seds werden da wohl nur Befehle erlaubt sein.
Stimmt, sowas steht auch in der manpage von sed unter HP-UX.
Naja, schade. Dann werde ich wohl doch mit einem zusätzlichem grep arbeiten müssen
Oh, yeah!