Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

23.04.2009, 22:47

änfänger frage? variable vergleichen mit haken ^^

ok ich hoffe ich hab das richtige unterforum gewählt :D

ich möchte euch nicht so strpazieren ich werde es kurz machen :D lol

ok ich bin gerade dabei, ich bin änfänger in bash, ein tailscript zu basteln was eine log datei auf einen ganz bestimmten text vergleicht und darauf reagiert, "ABER", jetzt kommt es, der text ist immer nur eine gewisse länge lang gleich, danach ändert sich der wert, bespiel:

ich suche nach: "^1WARNING: failed to register gear from"
aber in der log steht als satz: "^1WARNING: failed to register gear from maps/dem_gs.gear"

alles was hinter "failed to register gear from" ist jedesmal anders!

so nun meine frage wie kann ich das anstellen das, dass immer nur nach "^1WARNING: failed to register gear from" gesucht wird und nicht der ganze text ?

hier das script:

#! /bin/sh
calltype=
logtype1="Server:"
logtype2="ExitLevel:"
logtype3="^1WARNING:"
logline=


while true
do
read calltype logline

# zu demo zwecken die if schleife
# um zu sehen was passiert, varaible ausgabe
# if [ "$logtype" = "$calltype" ]; then
# echo $logline
# fi;
if [ "$calltype" = "$logtype3" ]; then
if [ "$logline" = "failed to register gear from" ]; then
echo $logline >> /home/bla/tailrestartscript/log.log
fi;
fi;

done

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »ren22« (23.04.2009, 22:48)


the thing

Schüler

  • »the thing« ist männlich

Beiträge: 109

Wohnort: NRW - Kreis Achen

Beruf: Anwendungsentwickler

  • Nachricht senden

2

24.04.2009, 00:13

schau dir mal reguläre ausdrücke (regex) an, damit kannst du einfach prüfen ob ein string ein gewünschtes muster enthält.

*edit

Da direkt ein Beispiel wie du es in deinem script implementieren kannst

Quellcode

1
2
3
4
5
6
7
8
#!/usr/bin/perl
$verse = "Zitto, zitto, piano, piano, senza " .
         "strepito e rumore";
if ($verse =~ /piano/) {
   print "Match!\n";
} else {
   print "Do not match!\n";
}


quelle: http://www.linuxjournal.com/article/6324

*edit

Ich hab das mal für dich in etwas vereinfachter form getestet:

Quellcode

1
2
3
4
5
6
serjoscha@lnxKiste:~$ foo="^1WARNING: failed to register gear from foobar"
serjoscha@lnxKiste:~$ echo $foo | grep -E "\^1WARNING: failed to register gear from"
^1WARNING: failed to register gear from foobar
serjoscha@lnxKiste:~$ foo="das ist ein test"
serjoscha@lnxKiste:~$ echo $foo | grep -E "\^1WARNING: failed to register gear from"
serjoscha@lnxKiste:~$ leer


hoffe du kannst damit was anfangen
"Wissen ist der größte Reichtum und Ignoranz zeugt von Armut" - Ali ibn Abi-Talib

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »the thing« (24.04.2009, 00:25)


strcat

Unix Gladiator

  • »strcat« ist männlich

Beiträge: 2 331

Wohnort: /Earth/Germany/Bavaria/Regensburg

  • Nachricht senden

3

24.04.2009, 00:31

Zitat

Original von the thing
[..]
http://www.linuxjournal.com/article/6324


Das "Tutorial" ist nichts halbes und nix ganzes, sondern nur ein hingeklatschter Seitenfueller von Linux-Journal (wie 98% aller anderen Artikel auch), der aufhoert bevor er anfaengt informativ zu werden.
Fuer Shells die konform zu POSIX 1003.1 aufwaerts sind, gibt es POSIX Regular Expressions oder man 7 regex
Christian 'strcat' Schneider <http://www.strcat.de/>
/* When all else fails, read the instructions. */

the thing

Schüler

  • »the thing« ist männlich

Beiträge: 109

Wohnort: NRW - Kreis Achen

Beruf: Anwendungsentwickler

  • Nachricht senden

4

24.04.2009, 00:40

naja es ging mir eigentlich nur darum kurz die implementation zu zeigen da ich grep benutzt habe und dafür kein script geschrieben hab. Zu linux journal kann ich nix sagen, weiß nicht wie fachgerecht die sind oder nicht.

Uu regex selber muss man sich auch nicht auf seiten belesen die im direkten zusammenhang mit linux stehen oder gar nichts anderes als linux behandeln, da regex so ziemlich überall seinen platz findet, sei es in scriptsprachen, programmen oder algorythmen / methoden. How ever

auf der quakenet site gabs mal ne nette infoseite zu regex.

Aber im ersten moment ist es erschlagend für jemanden der das noch nie gemacht hat.
Auch wenn das jetzt eine übertrieben einfache anwendung von regulären ausdrücken ist
"Wissen ist der größte Reichtum und Ignoranz zeugt von Armut" - Ali ibn Abi-Talib

5

24.04.2009, 09:33

Wenn man sich um Regexe drücken will, kann man das bestimmt auch mit Substrings hinbiegen.
Also, dass man die unbekannte Zeile auf die Länge des Musters trimmt und sie dann vergleicht.
In bash wäre das etwa so:

Quellcode

1
2
3
4
5
6
#! /bin/bash
muster='foo';
zeile='foobar';
if [[ "$muster" == "${zeile:0:${#muster}}" ]]; then
  echo 'match! \o/';
fi


Das könnte vielleicht sogar effizienter als ein Regex sein und vor allem vergleicht es nur den Anfang, im Gegensatz zum ebenfalls recht effizienten "grep -F ...".

the thing

Schüler

  • »the thing« ist männlich

Beiträge: 109

Wohnort: NRW - Kreis Achen

Beruf: Anwendungsentwickler

  • Nachricht senden

6

24.04.2009, 11:37

okay ich denke damit hast du recht, denn regex ist im generellen sehr langsam da da ne komplette interpreter engine hinter steckt, ich hab nur noch nie unter linux mit substrings gearbeitet, und wusste garnicht das das unter bash möglich ist.

Aber dann ist das wohl wirklich die bessere Lösung
"Wissen ist der größte Reichtum und Ignoranz zeugt von Armut" - Ali ibn Abi-Talib

7

24.04.2009, 11:52

Ich hab mir irgendwann mal komplett "man bash" durchgelesen. Man kann sich das zwar kaum alles behalten, aber es genügt ja, wenn man sich behält was möglich ist und wo es ungefähr steht.

Das mit den Substrings steht in der Sektion EXPANSION -> Parameter Expansion -> ${parameter:offset:length} . Das mit der Länge, steht gleich darunter, bei ${#parameter} .

Ich finde, wenn man fast jeden Tag die bash benutzt, dann sollte man auch zumindest einmal die Gebrauchsanweisung komplett gelesen haben.

8

25.04.2009, 00:25

RE: änfänger frage? variable vergleichen mit haken ^^

danke euch alle ich habs mit eurer hilfe geschafft :D ,hoffe ich zumindestens, :D

hier das fertige script:

#! /bin/bash
zeile=
suchmuster='^1WARNING: failed to register gear';
while true
do
read zeile
if [[ "$suchmuster" == "${zeile:0:${#suchmuster}}" ]]; then
echo 'match! \o/';
echo $zeile
echo $suchmuster
fi
done

habe mal $zeile und $suchmuster mit als demo rangehängt
um zu sehen ob alles korrekt ausgewertet wird

danke nochmals :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ren22« (25.04.2009, 00:26)


Thema bewerten