shell: strings beschneiden
-
deine loesung funktioniert leider nicht.
du hast mich aber auf die punkte gebracht. wenn ich ........ schreibe geht es.
-
sed 's/\(.\{'"$zahl"'\}\).*/\1/g'
?
-
sed: -e expression #1, char 18: Invalid content of \{\}
-
Bahhhh, warum startet ihr nicht gleich OpenOffice.org-Writer und startet darin ein Basic-Makro
? Sed ist hier doch totaler Overhead!
a=$( echo "Blahfasel" ); echo ${a:0:4}
Der erste Teil ist normal nicht nötig da man seine Ausgabe ja schon in einer Shell-Variablen hat!
Grundsätzlich sollte man drei Dinge bei der Shell-Programmierung meiden:
1. schreibe in Datei und liess dann wieder aus...
2. Pipes
3. Aufruf externer ProgrammeEin sed 's/foo/bar/g' ist fast so schlecht wie awk '{print $1}', sowas kan die Bash alles selber!
An Doku ist Linuxfibel nicht schlecht aber die Bash-Manpage ist fast immer ausreichend!
-
es gibt auch den advanced bash scripting guide unter http://www.tldp.org/guides.html. in englisch, aber mit vielen beispielen
-
vielen Dank, Peanut.
ich werde den Advanced Bash Scripting Guide lesen.
-
Original erstellt von Peanut:
Sed ist hier doch totaler Overhead!Aber die Bash (+ GNU make, readline, whatever) zu installieren um so eine Billigaufgabe durchzuführen ist sinnvoll?
»It's easier to port a shell than a shell script.« [Larry Wall] ist eine Feststellung, keine Spielregel.
-
Original erstellt von Daniel E.:
Aber die Bash (+ GNU make, readline, whatever) zu installieren um so eine Billigaufgabe durchzuführen ist sinnvoll?Nein! Aber es geht um die verschiedenen Interpreter. Da Doku zu (ba)sh-programmierung gefragt war, konnte ich von den Fähigkeiten der Bash ausgehen.
Man kann kleine Probleme jeweils komplett in Perl, awk, sed, sh, tcl oder was auch immer lösen, aber wenn jemand von Perl aus ein Shell-Script aufruft um von diesem ein awk-Kommando ausführen zu lassen zweifelt doch keiner daran, dass das das falsche Vorgehen ist, nur bei Shell-Programmierung wird gespornt, geforkt und gecallt was das Zeug und die Prozesstabelle hergibt und alle ( naja, viele ) halten es für normal und richtig!So ein Eizeiler um den es hier geht macht den Kohl nicht fett, aber es bleibt ja meist nicht bei der einen Zeile. Die ein oder andere Schleifenkonstruktion und schon ergeben sich Laufzeiten von Scripten im Minutenbereich die durch verwendung des richtigen vorgehens auf Sekunden reduzierbar währen.
Mir hat mal jemand gesagt: "Wer nur einen Hammer hat, für den ist alles ein Nagel!". Der Umkehrschluss "Je mehr Werkzeuge desto besser" ist aber genauso falsch da der Werkzeugwechsel eben sehr "teuer" ist.
-
Original erstellt von Peanut:
Nein! Aber es geht um die verschiedenen Interpreter. Da Doku zu (ba)sh-programmierung gefragt war, konnte ich von den Fähigkeiten der Bash ausgehen.Es war nicht mal die Version angegeben. Weißt Du ob bei einer Bash aus dem Jahre Schnee 'echo' schon ein Builtin war? Allein die Anwendung von $(...) ist hier überflüssig wie ein Kropf.
bei Shell-Programmierung wird gespornt, geforkt und gecallt was das Zeug und die Prozesstabelle hergibt und alle ( naja, viele ) halten es für normal und richtig!
Ist es ja auch. Wenn Du es für normaler hältst, performancekritische Software in der Sprache 'bash' zu verfassen -- bitte.
Die ein oder andere Schleifenkonstruktion und schon ergeben sich Laufzeiten von Scripten im Minutenbereich die durch verwendung des richtigen vorgehens auf Sekunden reduzierbar währen.
Wenn es sinnvoll ist, dann bin ich immer dabei. Bedenklich wird es aber dann, wenn ich von einer allgemein akzeptierten Basis (das ist POSIX wohl) in die dunklen Gefilde des GNU & Bashischmus abrutsche. So etwas gibt man nicht wegen 0.004 Sekunden auf.
-
Original erstellt von Daniel E.:
Allein die Anwendung von $(...) ist hier überflüssig wie ein Kropf.Daher habe ich geschrieben:
Der erste Teil ist normal nicht nötig da man seine Ausgabe ja schon in einer Shell-Variablen hat!Original erstellt von Daniel E.:
Wenn Du es für normaler hältst, performancekritische Software in der Sprache 'bash' zu verfassen -- bitte.Wer sagt was von performancekritisch? Ich kenne nur so Kommentare wie: "Es kann ja wohl nicht angehen das es drei Stunden dauert 4000 Mails zu löschen..." -- Wartungsfenster beantragt um den Schaden eines wildgewordenen Mail-Agents zu beseitigen!
Original erstellt von Daniel E.:
Wenn es sinnvoll ist, dann bin ich immer dabei. Bedenklich wird es aber dann, wenn ich von einer allgemein akzeptierten Basis (das ist POSIX wohl) in die dunklen Gefilde des GNU & Bashischmus abrutsche. So etwas gibt man nicht wegen 0.004 Sekunden auf.Das sehe ich genau so, wegen 0.004 Sekunden macht man sich keinen Kopf aber man sollte doch grade Anfänger auf diese Sachverhalte aufmerksahm machen! Wie verträgt sich dein Larry-Wall-Zitat (Quelle? Find es gut!) den mit dieser Auffassung? Mach dir doch mal den Spass und linke /bin/sh in einer Bash basierten Distribution ( getestet: Debian, Suse, RedHat ) auf eine echte Born-Shell oder z.B. die ash die ja Posix konform zur Born kompatibel sein sollte, und dann guck dir an wie toll die ganzen Scripte es noch tun
In meinen Scripten steht auch wirklich #!/bin/bash da ich mir bewust bin das meine Scripte meist nicht mit der Born laufen.
Es gibt zu diesem Thema sicherlich unterschiedliche Standpunkte und wir sollten es doch einfach dabei belassen das wir beide unterschiedicher Meinung sind!
[ Dieser Beitrag wurde am 25.04.2003 um 10:25 Uhr von Peanut editiert. ]