Hallo, Am Sun, 10 Apr 2005, Thomas Rippler schrieb:
Die Krönung wäre noch eine ODER-Bedingung nach dem Muster. Lösche die Zeile falls kein "e" oder "E" enthalten ist.
sed '/[eE]/!d'
==== man sed ==== [..] auf die Idee das Kommando zu negieren wäre ich wohl nie gekommen. Ich glaube mir fehlt das auch noch das Auge, man-pages richtig zu lesen. Wieder etwas dazu gelernt.
*g* Noch ein Hinweis: sobald du sed verwendest brauchst du kein grep mehr. Zum Beispiel wie sich 'grep' ersetzen laesst: $ IN='abc\nbcd\ncde\ndef\nefg\nABC\nBCD\nCDE\nDEF\nEFG' $ echo -e "$IN" | grep '[eE]' | grep -v 'd' | xargs echo efg CDE DEF EFG $ echo -e "$IN" | sed -n '/[eE]/{ /d/!p; }' | xargs echo efg CDE DEF EFG $ echo -e "$IN" | awk '/[eE]/{ if($0 !~ /[d]/) { print; }; }' | xargs echo efg CDE DEF EFG Ok, "grep -i 'e'" waere auch moeglich und bei den Adressen kennt sed keinen 'i' modifier... Da muss man evtl. ueberlegen was guenstiger ist. Generell ist zu bedenken, das das starten eines Prozesses (also z.B. ein extra 'grep' (oder extrem: ein extra perl)) "teuer" ist, was jedoch sobald das ganze etwas laenger laeuft und nicht z.B. hundertfach in einer Schleife gestartet wird weniger relevant wird. In so einer Schleife sollte man aber die Prozesse minimieren. Oder die Schleife gleich in das Programm hineinverlagern, was bei 'perl' am extremsten auffaelt, da perl recht lange zum Starten braucht. Man nehme ein Verzeichnis mit einigen Dateien, hier bei mir im Beispiel sind's 1472 Dateien: $ time for f in *; do perl -e 'print "$ARGV[0]\n";' -- "$f" ; done | wc -l 1472 real 0m28.842s user 0m20.610s sys 0m8.180s $ time perl -e 'foreach(@ARGV) { print "$_\n"; }' -- * | wc -l 1472 real 0m0.054s user 0m0.040s sys 0m0.000s $ time perl -e 'foreach(@ARGV) { print "$_\n"; }' -- * | wc -l 1472 real 0m0.094s user 0m0.040s sys 0m0.010s Ein Faktor ~300-600 bei ~1500 Dateien ist nicht schlecht, oder? Ja, die letzten beiden waren direkt hintereinander gestartet... Bei so kurzen Zeiten unter 0.1s variieren die 'time' Ausgaben (gerade mit perl) oft so deutlich, ich hatte hier grad Zeiten zwischen 0.044s und 0.098s, die Zeiten der ersten Schleife hingegen variierten nur hinter dem Komma (zwischen 28.6s und 28.9s ungefaehr)... Also immer ein bisserl ein Auge darauf haben, dass man nicht unnoetig Prozesse startet. Wenn man auf der Kommandozeile fuer den "einmal Gebrauch" was zusammenbastelt, dann macht's nix, aber wenn man's in ein Script schreibt sollte man sich ueber sowas schon Gedanken machen. -dnh -- Support bacteria - it's the only culture some people have!