Dateinnamen auf enthaltene Zeichenkette prüfen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Galli
Beiträge: 35
Registriert: 23.09.2003 02:00:59

Dateinnamen auf enthaltene Zeichenkette prüfen

Beitrag von Galli » 16.02.2008 21:38:31

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.

Benutzeravatar
domoson
Beiträge: 322
Registriert: 04.08.2007 19:27:13
Wohnort: Bayern
Kontaktdaten:

Beitrag von domoson » 17.02.2008 01:04:37

Hallo,

bin auch nicht so der Bash-Freak, aber nur so als "Nachtlektüre" mal man grep anschauen? Hab allerdings keine Ahnung ob das mit Variablen funktioniert.

Hoffe ein wenig geholfen zu haben!

Gruß

Spasswolf
Beiträge: 3472
Registriert: 30.11.2005 10:32:22
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Wald

Beitrag von Spasswolf » 17.02.2008 01:12:29

So?

Code: Alles auswählen

echo $VARIABLE | grep "[0-9][1-9]"

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 17.02.2008 10:34:01

Entweder es ist so gemeint wie Spasswolf es gezeigt hat, oder aber du gibst uns vielleicht mal ein Beispiel zum besseren Verständnis.

Was du hast und was du haben möchtest.
Oh, yeah!

Galli
Beiträge: 35
Registriert: 23.09.2003 02:00:59

Beitrag von Galli » 17.02.2008 20:11:35

Spasswolf hat geschrieben: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?


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]

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 22.02.2008 08:49:25

...ich wollte noch kurz erwähnen, dass die Lösung so die titel 10, 20, 30 etc. ausschließt. :wink:

Gruß fuzzy

goecke
Beiträge: 289
Registriert: 12.01.2007 11:57:27

Beitrag von goecke » 22.02.2008 08:58:47

dann versuch mal

Code: Alles auswählen

echo $VARIABLE | grep "[0-9][0-9]" 
[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]

=>

Code: Alles auswählen

man grep 
HTH
Johannes

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2008 09:14:37

Galli hat geschrieben: Ich wußte nicht dass man grep 2 Suchstrings mitgeben kann. Ist das dann ein logisches UND?
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.
fuzzy hat geschrieben:...ich wollte noch kurz erwähnen, dass die Lösung so die titel 10, 20, 30 etc. ausschließt. :wink:
nachdem daher mit dieser "Lösung" die Aufgabe nicht erfüllt wird, ist das auch durchaus erwähnenswert :lol:
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]"
@Galli
das '|' Zeichen bedeutet in diesem Zusammenhang eine ODER Verknüpfung

Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 22.02.2008 09:54:58

Nicht schlecht. Oder man nimmt direkt egrep.

Code: Alles auswählen

echo $VARIABLE | egrep "(0[1-9]|[1-9][0-9])"
oder wenn VARIABLE auch einen Wert wie 9 haben kann,

Code: Alles auswählen

echo $VARIABLE | egrep "(0?[1-9]|[1-9][0-9])"
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2008 10:18:28

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])"
das geht aber auch einfacher:

Code: Alles auswählen

echo $VARIABLE | grep "[0-9]"
Gruß
gms

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 22.02.2008 11:24:46

Ok, stimmt. Du hast natürlich (mal wieder) recht.
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2008 11:48:20

eigentlich nicht :lol:
Ich hatte einen Tippfehler drinnen

Code: Alles auswählen

echo $VARIABLE | grep "[1-9]"

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 22.02.2008 11:54:50

Hä...warum stört dich denn der Range von 0-9 bzw. was stört dich an der 0?
Oh, yeah!

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2008 11:59:46

Duff hat geschrieben:Hä...warum stört dich denn der Range von 0-9 bzw. was stört dich an der 0?
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' erlaubt

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 22.02.2008 12:27:13

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
Zuletzt geändert von gms am 22.02.2008 13:38:01, insgesamt 1-mal geändert.

Benutzeravatar
finupsen
Beiträge: 1327
Registriert: 21.04.2004 20:07:05
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Dortmund
Kontaktdaten:

Beitrag von finupsen » 22.02.2008 12:32:55

ich hab den beitrag wieder gelöscht ... weils unsinn war ;)
Niemand hat vor eine zentrale Datensammelbehörde aufzubauen. Es handelt sich vielmehr um dezentrale IT-Systeme die miteinander vernetzt werden.
... und Wasser ist naß.

Galli
Beiträge: 35
Registriert: 23.09.2003 02:00:59

Beitrag von Galli » 29.02.2008 17:48:09

fuzzy hat geschrieben:...ich wollte noch kurz erwähnen, dass die Lösung so die titel 10, 20, 30 etc. ausschließt. :wink:
Ah, naja ich hatte eh "[0-9][0-9]" benuttzt, wie von gms vorgeschlagen.

P.S.: Danke für Eure Hilfe. Hab das Problem damit lösen können und noch was gelernt. Was will man mehr?

Antworten