Hallo zusammen, ich suche eine Möglichkeit, aus einem Skript heraus eine Datei Zeile für Zeile einzulesen und jedesmal zu überprüfen, ob diese mit einem hash anfängt. Die manpage von "string" verrät mir, dass diese Überprüfung mit 'trim' machbar ist, aber die bash ist der Meinung, dass dieser Befehl nicht existiert. $ man string [...] <-- Ein Haufen Zeugs $ $ string1=ABCDEFG $ string2=string trim $string1 3 bash: trim: command not found $ Was mache ich da falsch? Habe ich die manpage vielleicht ein bisschen falsch verstanden? Der Hintergrund ist folgender: Ich möchte eine Datei ~/.buconfig anlegen, in der neben Kommentarzeilen, die mit '# ' beginnen, alle Dateien angegeben sind, die gesichert werden sollen. Ein Skript soll dann diese Datei auslesen und alle Zeilen, die wirklich einen Dateinamen und keinen Kommentar oder ein blank enthalten, weiterverarbeiten und an tar -cvT ... übergeben. Das Auslesen mit test scheitert, weil die Kommentarzeilen mehrere Wörter enthalten, dies führt zu einem test: too many arguments. :( Hat jemand den Befehl parat, der mein Freund ist? Das Skript an sich steht und tut auch, nur das Einlesen klappt nicht.... *grmpf* Oder kennt jemand eine viel einfachere Lösung? Ach so, besagter Teil meines Skriptes sieht so aus: ----------8<--------------------------------------------- while read zeile do if ????? <- Abfrage, ob wirklich zu sichernder Dateiname then *muss gesichert werden* else *ignorieren* fi done <~/.buconfig -----------8<--------------------------------------------- Vielen Dank! Stephan, der jetzt entnervt die Mühle runterfährt und beschließt, dass Computer ohnehin völlig überflüssig sind. ;-) -- Stephan Hakuli -------+--------------------------------> | Our domain mailto: stephan@hakuli.de | http://www.hakuli.de callto: +49 171 / 6518943 | is still under construction... --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Stephan Hakuli wrote:
Hallo zusammen,
ich suche eine Möglichkeit, aus einem Skript heraus eine Datei Zeile für Zeile einzulesen und jedesmal zu überprüfen, ob diese mit einem hash anfängt.
Einfachste Loesung ist immer noch ein Mini sed-script: ed "/^[ ]*#/d; /^[ ]*/d" infile | .... Ignoriert alle Zeilen die leer sind nur spaces oder tabs enthalten mit # anfangen mit tabs und/oder spaces gefolgt von einem # anfangen ed "/^[ ]*#/d; /^[ ]*/d; s/#.*$//" infile | ... Macht das Gleiche, entfernt aber noch Kommentare am Zeilenende Alle anderen Loesungen sind komplizierter: while read Line && [ "$Line" ]; do [[ "$Line" == *([ ])#* ]] && continue echo "${Line%%#*} done < infile | ... Henning -- H. Henning Vossieck http://hhv.de [currently inactive] SuSE Linux 6.4 Kernel 2.4.0-test3-274 glibc 2.1.3 gcc 2.95.2 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Die, Jul 11, 2000 at 11:21:42 +0200, Henning wrote:
Stephan Hakuli wrote:
Hallo zusammen,
ich suche eine Möglichkeit, aus einem Skript heraus eine Datei Zeile für Zeile einzulesen und jedesmal zu überprüfen, ob diese mit einem hash anfängt.
Einfachste Loesung ist immer noch ein Mini sed-script: ^^^^^^^^^^^?
sed "/^[ ]*#/d; /^[ ]*/d" infile | ....
Ignoriert alle Zeilen die leer sind nur spaces oder tabs enthalten mit # anfangen mit tabs und/oder spaces gefolgt von einem # anfangen
sed "/^[ ]*#/d; /^[ ]*/d; s/#.*$//" infile | ...
Macht das Gleiche, entfernt aber noch Kommentare am Zeilenende
Alle anderen Loesungen sind komplizierter:
Nana. Das ist jetzt ein wenig absolut: grep -v "^#" infile | while read zeile; do ... done ist ja wohl nicht so kompliziert, oder? Whitespaces am Zeilenanfang werden (zumindest bei mir im Test) sowieso überlesen, die muss man also nicht erst mühsam entfernen. awk ' /^ / { next } /^#/ { next } { print $0 } ' infile | while read zeile; do ieht auch recht manierlich aus, gelle? Kommentare in der Zeile kann man auch sehr einfach entfernen: grep ... | cut -f1 -d"#" | while read zeile; do ... tut auch nicht weh. Jan --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Jan Trippler wrote:
...
Alle anderen Loesungen sind komplizierter:
Nana. Das ist jetzt ein wenig absolut:
grep -v "^#" infile | while read zeile; do
entspricht ed /^#/d
awk ' /^ / { next } /^#/ { next } { print $0 } ' infile | while read zeile; do
entspricht ed '/^[ #]/d'
Kommentare in der Zeile kann man auch sehr einfach entfernen: grep ... | cut -f1 -d"#" | while read zeile; do ...
entspricht ed "/^#/d;s/#.*//" ... Soviel zu 'Einfach' (oder kurzoder elegant) Henning -- H. Henning Vossieck http://hhv.de [currently inactive] SuSE Linux 6.4 Kernel 2.4.0-test4-pre4-277 glibc 2.1.3 gcc 2.95.2 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
On Don, Jul 13, 2000 at 01:30:51 +0200, Henning wrote: [sed vs. andere Kdos]
... Soviel zu 'Einfach' (oder kurzoder elegant)
Einfach kann auch bedeuten: Für den Newbie lesbar. Jan EOT --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Jan Trippler wrote:
On Don, Jul 13, 2000 at 01:30:51 +0200, Henning wrote: [sed vs. andere Kdos]
... Soviel zu 'Einfach' (oder kurzoder elegant)
Einfach kann auch bedeuten: Für den Newbie lesbar.
Eben. Das ist der Unterschied zwischen einfach und kurz. Henning -- H. Henning Vossieck http://hhv.de [currently inactive] SuSE Linux 6.4 Kernel 2.4.0-test5-pre1-280 glibc 2.1.3 gcc 2.95.2 --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
Hi Stephan,
From: Stephan Hakuli
Sent: Tuesday, July 11, 2000 10:41 PM
-- Den Anfang entfernt
Der Hintergrund ist folgender: Ich möchte eine Datei ~/.buconfig anlegen, in der neben Kommentarzeilen, die mit '# ' beginnen, alle Dateien angegeben sind, die gesichert werden sollen. Ein Skript soll dann diese Datei auslesen und alle Zeilen, die wirklich einen Dateinamen und keinen Kommentar oder ein blank enthalten, weiterverarbeiten und an tar -cvT ... übergeben. Das Auslesen mit test scheitert, weil die Kommentarzeilen mehrere Wörter enthalten, dies führt zu einem test: too many arguments. :(
Hat jemand den Befehl parat, der mein Freund ist? Das Skript an sich steht und tut auch, nur das Einlesen klappt nicht.... *grmpf* Oder kennt jemand eine viel einfachere Lösung?
Ach so, besagter Teil meines Skriptes sieht so aus:
----------8<---------------------------------------------
while read zeile do
if ????? <- Abfrage, ob wirklich zu sichernder Dateiname
then *muss gesichert werden* else *ignorieren* fi
done <~/.buconfig
-----------8<--------------------------------------------- ich wuerde es so machen:
--- snipp --- : ${ztodo:=~/.buconfig} if test -s $ztodo then while read ZFILE do case "$ZFILE" in \#*|"") ;; *) echo $ZFILE esac done < $ztodo fi --- snapp --- by Joerg --------------------------------------------------------------------- To unsubscribe, e-mail: suse-linux-unsubscribe@suse.com For additional commands, e-mail: suse-linux-help@suse.com
participants (4)
-
hhv@hhv.de
-
j.zimmermann@xsiteing.de
-
Jan.Trippler@t-online.de
-
stephan.hakuli@gmx.de