Dateinnamen auf enthaltene Zeichenkette prüfen
Dateinnamen auf enthaltene Zeichenkette prüfen
Hi Leute,
in einem Bash-skript will ich prüfen ob eine der Zeichenketten '01' bis '99' in einem Dateinamen (der in einer Variablen gescpeichert ist) vorkommt. Ich hab leider keine Ahnung wie das geht, bin nicht so der Bash-Checker.
in einem Bash-skript will ich prüfen ob eine der Zeichenketten '01' bis '99' in einem Dateinamen (der in einer Variablen gescpeichert ist) vorkommt. Ich hab leider keine Ahnung wie das geht, bin nicht so der Bash-Checker.
-
- Beiträge: 3472
- Registriert: 30.11.2005 10:32:22
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Wald
So?
Code: Alles auswählen
echo $VARIABLE | grep "[0-9][1-9]"
Ja das ist scheint ziemlich genau zu sein, was ich will. Ich wußte nicht dass man grep 2 Suchstrings mitgeben kann. Ist das dann ein logisches UND?Spasswolf hat geschrieben:So?Code: Alles auswählen
echo $VARIABLE | grep "[0-9][1-9]"
P.S.: der Sinn der ganzen Sache ist es, in einer mp3-Sammlung die Tracknummer aus dem Dateiname zu extrhieren (falls vorhanden), um Sie dan ins id3-tag schreiben zu können.[/code]
dann versuch mal
[1-9] ist platzhalter genau ein Zeichen aus der Menge 1,2,3,4,5,6,7,8,9
[Lehrermodus]
Hausaufgabe:
was mach [0-9]
[/Lehrermodus]
=>
HTH
Johannes
Code: Alles auswählen
echo $VARIABLE | grep "[0-9][0-9]"
[Lehrermodus]
Hausaufgabe:
was mach [0-9]
[/Lehrermodus]
=>
Code: Alles auswählen
man grep
Johannes
das ist eigentlich nur ein Suchstring, es wird nach einer Zeichenkette der Länge 2 gesucht, deren erstes Zeichen die Werte '0' bis '9' UND deren zweites Zeichen die Werte '1' bis '9' annehmen kann.Galli hat geschrieben: Ich wußte nicht dass man grep 2 Suchstrings mitgeben kann. Ist das dann ein logisches UND?
nachdem daher mit dieser "Lösung" die Aufgabe nicht erfüllt wird, ist das auch durchaus erwähnenswertfuzzy hat geschrieben:...ich wollte noch kurz erwähnen, dass die Lösung so die titel 10, 20, 30 etc. ausschließt.
eventuell kann die Aufgabe auf die Zeichenkette '00' bis '99' ausgedehnt werden, dann liegt die Lösung ja auf der Hand, ansonsten könnten z.B die "extended regular Expressions" verwendet werden:
Code: Alles auswählen
echo $VARIABLE | grep -E "0[1-9]|[1-9][0-9]"
das '|' Zeichen bedeutet in diesem Zusammenhang eine ODER Verknüpfung
Gruß
gms
Nicht schlecht. Oder man nimmt direkt egrep.
oder wenn VARIABLE auch einen Wert wie 9 haben kann,
Code: Alles auswählen
echo $VARIABLE | egrep "(0[1-9]|[1-9][0-9])"
Code: Alles auswählen
echo $VARIABLE | egrep "(0?[1-9]|[1-9][0-9])"
Oh, yeah!
das geht aber auch einfacher:Duff hat geschrieben: oder wenn VARIABLE auch einen Wert wie 9 haben kann,
Code: Alles auswählen
echo $VARIABLE | egrep "(0?[1-9]|[1-9][0-9])"
Code: Alles auswählen
echo $VARIABLE | grep "[0-9]"
gms
eigentlich nicht
Ich hatte einen Tippfehler drinnen
Ich hatte einen Tippfehler drinnen
Code: Alles auswählen
echo $VARIABLE | grep "[1-9]"
die Aufgabe war die Zeichenketten '01' - '99' zu suchen, du hast diese für dein Beispiel, so erweitert, daß die führende '0' auch weggelassen werden kann. Daher muß dann zumindest eine Ziffer zwischen '1' und '9' liegen, damit diese erweiterte Aufgabe erfüllt ist. Mit grep "[0-9]" wäre ja auch '0' und '00' erlaubtDuff hat geschrieben:Hä...warum stört dich denn der Range von 0-9 bzw. was stört dich an der 0?
edit: daß der vorherige Beitrag gelöscht wurde habe ich zu spät bemerkt, daher habe ich jetzt meine Antwort darauf auch zurückgezogen
Gruß
gms
Gruß
gms
Zuletzt geändert von gms am 22.02.2008 13:38:01, insgesamt 1-mal geändert.