String auf bestimmte Zeichenfolge prüfen/finden?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
eimer
Beiträge: 77
Registriert: 09.11.2005 12:55:49
Wohnort: Endingen a.K.

String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von eimer » 12.09.2008 10:19:46

HI Leute,
versuche gerade ein kleines bash Script zu schreiben.
Jetzt steh ich vor einem Problem ich würde gerne eine case einbauen mir ist da nur was nicht ganz klar.

Also nehmen wir an ich hab den str1="Peter_Lustig....S01E01"
Ich möchte jetzt S01 extrahieren bzw. in der case auf S01 prüfen.
S01; S02 .... S20 sind natürlich alle möglich, auch s01, s02... s20 sind möglich.
Ich denke mann mus erst den Teil extrahieren, damit er dann der case übergeben werden kann. Nur ist mir nicht klar wie der befehl dazu heißt.


Offtopic:
Kann ich eigentlich mit c++ alles machen wie mir der bash, bzw. kann ich alles was ich mit der bash programmiere auch in c++ schreiben. So das es auch funktioniert in der Konsole?

mfg eimer
Gi´me hope Juana.....

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

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von Duff » 12.09.2008 11:15:05

Hallo,

eine case-Anweisung in der Shell funktioniert grundsätzlich so:

Code: Alles auswählen

case Ausdruck in
        Muster1) Befehle;;

        Muster2) Befehle;;

        Muster3|Muster4) Befehle;;

        MusterN) Befehle;;

        *) Befehle;;
esac
Entweder gibst du dann für Muster immer den kompletten Namen an, ober aber du schneidest mit Hilfe von regular Expression den gewünschten Teil aus dem String und nimmst dann diesen.
Oh, yeah!

eimer
Beiträge: 77
Registriert: 09.11.2005 12:55:49
Wohnort: Endingen a.K.

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von eimer » 12.09.2008 11:20:24

Ok kein Problem den mit cut zu schneiden. Leider muss ich die Zeichenfolge erstmall in meinem Ausgangstring finden. Das ist mein Problem.


mfg eimer
Gi´me hope Juana.....

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von jhr-online » 12.09.2008 11:33:12

Wie wär's mit perl?

Code: Alles auswählen

#!/usr/bin/perl

$string = "runtergeladene serie...S01e02.wen_stört's?";

if($string =~ m/s(\d+)e(\d+)/i) {
        $season = $1;
        $episode = $2;
}

print "Staffel: $season, Episode: $episode\n";
jhr
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

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

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von Duff » 12.09.2008 11:33:57

Dann poste dochmal den Ausgangsstring und wir schauen, was wir wie abschneiden.
Oh, yeah!

eimer
Beiträge: 77
Registriert: 09.11.2005 12:55:49
Wohnort: Endingen a.K.

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von eimer » 12.09.2008 11:37:35

Der string ist variabel also immer anderst.
Und wenn ich Perl könnte würd ich es auch machen, das ist ja nur ein Teil von einem großen ganzen, hier komm ich nur nicht weiter.gibts nicht sowas wie find (str1="Pe",str2="Peter") Ausgabe 1 für erstes Zeichen?

Offtopic: Kann ich mit Perl auch wie in der shell "rm-r" usw. aufrufen? Dann wäre Perl mal ein versuch wert.
Gi´me hope Juana.....

jhr-online
Beiträge: 2186
Registriert: 18.09.2005 15:52:02
Lizenz eigener Beiträge: GNU Free Documentation License
Kontaktdaten:

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von jhr-online » 12.09.2008 11:51:42

Perl hat eigene Befehle, also jain :) http://www.cs.cmu.edu/afs/cs/user/rgs/m ... -file.html
Was du suchst, sind Regular Expressions, wie ich sie in dem Code-Beispiel oben benutzt habe:

Wir gucken, ob ein String diesen Ausdruck

Code: Alles auswählen

s(\d+)e(\d+)
enthält (das m vorne für "match" und das i am Ende für "case insensitive", also ohne Berücksichtigung der Groß-/Kleinschreibung). Der Ausdruck ist simpel... Es kommt ein "s", dann eine Zahl (\d für digit), die ein oder mehr Zeichen (+) haben soll, dann ein "e" und wieder die Zahl. Was in Klammern steht wird in die Variablen $1 und $2 gesteckt, einfach der Reihe nach, und kann dann ausgelesen werden. Also haben wir in $1 die Staffel und in $2 die Episode...

jhr

//edit: weil ich gerade einen netten Tag hab :)

Code: Alles auswählen

#!/usr/bin/perl

$parameter = $ARGV[0];

if(<STDIN> =~ m/s(\d+)e(\d+)/i) {
        $season = $1;
        $episode = $2;
        $matched = "true";
}

if($matched) {
        if($parameter eq "-s"){ print $season; exit; }
        if($parameter eq "-e"){ print $episode; exit; }
}

exit 1;
Nicht schön, funktioniert aber, nämlich so:

Code: Alles auswählen

prompt$ echo "serie s02e13.avi" | script.pl -s
02
promtp$ echo "serie s02e13.avi" | script.pl -e
13
Zuletzt geändert von jhr-online am 12.09.2008 12:12:01, insgesamt 1-mal geändert.
Desktop: Intel Core2Quad Q8300 2.5GHz, 256GB SSD + 1 TB HDD, 8 GB RAM, Debian Sid, Kernel 3.13

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

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von Duff » 12.09.2008 12:02:08

Man kann mit perl auch unix-Befehle aufrufen (system, qx).

Aber zeig uns doch mal wie du der String aussieht. Regular Expression kann man auch in der bash benutzen, z.B. sed.
Oh, yeah!

eimer
Beiträge: 77
Registriert: 09.11.2005 12:55:49
Wohnort: Endingen a.K.

Re: String auf bestimmte Zeichenfolge prüfen/finden?

Beitrag von eimer » 12.09.2008 12:52:05

Sitz hier nicht an meinem Rechner also kann ich das nur aus dem Kopf machen waber was jhr genommen hat kommt schon hin

"www.serienjunkies.de...Peter.Lustig.S01e02.von.Robin.Dutt"

Regelmäßigkeiten, meine ich nicht zu erkennen in den ienzelnen aufrufen.

Ich versuch das jetzt mal in Perl vll. klappt das ja.
Gi´me hope Juana.....

Antworten