Anzeige:
Ergebnis 1 bis 12 von 12

Thema: bash grep script ?

  1. #1
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6

    bash grep script ?

    Hallo Community !

    Bin neu hier, und auf der Suche nach Hilfe in Sachen Bash Scripte & grep...

    Ich betreibe einen Server den ich über telnet direkt die Serverfile-Konsole erreiche.
    Ich habe ein bash schript gefunden, was Leute mit zu hohem ping vom server kickt.

    Da es ein Serverfilesupdate gab, und die Telnetausgabe auch verändert wurde, "erfasst" mir das Bash script nicht den PING wert den ich aus der Konsole auslesen muss.


    Altes Script vor dem Update:

    Code:
    #!/bin/bash
    
    PINGLIMIT=250
    
    telnetCommand $1 "say Hello $4."
    
    PLAYER=$(telnetCommand $1 "lp" | grep "$5" )
    PING=$(echo $PLAYER | awk -F"=" '{ print $13 }' | sed -e 's/\r//g' )     - Um diese Zeile geht es, wie schafft man es den PING auszulesen ? also alles nach "PING="
    telnetCommand $1 "sayplayer $3 Your Ping is $PING ms maximum ping can be: $PINGLIMIT ms"
    
    if [ $PING -gt $PINGLIMIT ]; then
     telnetCommand $1 "kick $3 'Your ping is too DAMN HIGH'"
    fi

    Die neue telnetausgabe nach einem "lp" befehl :

    Code:
    2015-04-06T20:49:26 173926.281 INF Telnet executed "lp" from: xx.xx.xx.226:53273
    1. id=8784, Sir xxx, pos=(1350.6, 62.4, -639.2), rot=(-7.0, 134.8, 0.0), remote=True, health=106, deaths=2, zombies=106, players=0, score=100, steamid=76561198xxxxxxxxx, ip=xxx.xxx.178.23, ping=76
    2. id=478, Jxx, pos=(1214.6, 94.9, -631.4), rot=(-19.7, -210.9, 0.0), remote=True, health=63, deaths=7, zombies=130, players=0, score=100, steamid=76561198xxxxxxxxx, ip=xxx.xxx.2.100, ping=180
    3. id=4061, Triplexxx, pos=(856.5, 78.3, 171.0), rot=(-38.0, -105.5, 0.0), remote=True, health=5, deaths=9, zombies=83, players=0, score=51, steamid=76561198xxxxxxxxx, ip=xx.xxx.148.205, ping=92
    4. id=11613, Knecht x, pos=(3449.9, 52.4, -2173.3), rot=(-16.7, -21.7, 0.0), remote=True, health=111, deaths=1, zombies=1056, players=1, score=1051, steamid=76561198xxxxxxxxx, ip=xxx.xx.164.164, ping=22
    5. id=8795, ^2xxx, pos=(-266.2, 33.4, 1040.5), rot=(-17.0, 294.0, 0.0), remote=True, health=25, deaths=21, zombies=553, players=0, score=476, steamid=76561198xxxxxxxxx, ip=xxx.xxx.x.118, ping=62
    6. id=361, Eiswölx, pos=(1592.1, 46.1, -1901.5), rot=(-28.1, -292.5, 0.0), remote=True, health=100, deaths=3, zombies=910, players=0, score=895, steamid=76561197xxxxxxxxx, ip=xx.xxx.251.182, ping=22
    7. id=203,  Otxxx ☢ xxx ☢, pos=(-267.2, 32.3, 1041.3), rot=(-5.3, 289.7, 0.0), remote=True, health=54, deaths=27, zombies=259, players=0, score=162, steamid=76561198xxxxxxxxx, ip=xxx.xxx.0.10, ping=107
    8. id=360, xxxx, pos=(1592.3, 4.1, -1918.8), rot=(-8.6, -276.4, 0.0), remote=True, health=165, deaths=0, zombies=1395, players=1, score=1395, steamid=76561197xxxxxxxxx, ip=xxx.xxx.xx.162, ping=22
    9. id=84351, xxxxr, pos=(27.3, 66.0, 1886.0), rot=(-22.3, 13.3, 0.0), remote=True, health=100, deaths=0, zombies=0, players=0, score=0, steamid=76561197xxxxxxxxx, ip=xx.xx.19.181, ping=64
    10. id=22573, xxxxxx, pos=(-6416.3, 4.1, 6551.9), rot=(-19.7, -8.5, 0.0), remote=True, health=92, deaths=3, zombies=457, players=0, score=445, steamid=76561197xxxxxxxxx, ip=x.xxx.xx.232, ping=41
    11. id=10297, Don xxxxxxx, pos=(-6410.6, 4.1, 6556.6), rot=(-29.5, -68.9, 0.0), remote=True, health=69, deaths=2, zombies=163, players=0, score=153, steamid=76561197xxxxxxxxx, ip=x.xxx.74.232, ping=38
    Total of 11 in the game

  2. #2
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6
    wie muss ich
    PING=$(echo $PLAYER | awk -F"=" '{ print $13 }' | sed -e 's/\r//g' )
    verändern ?
    um aus der folgende Zeile
    1. id=8784, Sir xxx, pos=(1350.6, 62.4, -639.2), rot=(-7.0, 134.8, 0.0), remote=True, health=106, deaths=2, zombies=106, players=0, score=100, steamid=76561198xxxxxxxxx, ip=xxx.xxx.178.23, ping=76
    den Pingwert zu extrahieren ?

    $PING = 76
    Geändert von PR-X (06.04.15 um 21:13 Uhr)

  3. #3
    Codefuzzy Avatar von Efraim
    Registriert seit
    Jun 2010
    Beiträge
    445
    Code:
    grep -Po "(?<=ping=).*(?=$)" <<< "$PLAYER"
    ist eine Möglichkeit. Es wird also alles von ping= bis zum Zeilenende geliefert.

  4. #4
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6
    PLAYER=$(telnetCommand $1 "lp" | grep "$5" )
    PING=$(echo $PLAYER | grep -Po "(?<=ping=).*(?=$)" )
    telnetCommand $1 "say $PING"

    hmm irgendwas mach ich falsch.

    Server sagt nix ( also keine Zahl sonstiges zeichen abgefangen )

  5. #5
    Codefuzzy Avatar von Efraim
    Registriert seit
    Jun 2010
    Beiträge
    445
    Unter Umständen beherrscht Deine grep-Version keine Perl-Regexe.

    Dieses grep liefert schlicht die letzte Zahl vor einem Zeilenende:
    Code:
    grep -o "[0-9]*$"
    Ach ja, ich sehe bei Dir einen sed-Filter (sed -e 's/\r//g'), der wohl Windows-Zeilenendes korrigiert, den solltest Du davor schalten:
    Code:
    sed -e 's/\r//g'| grep -Eo "[0-9]*$"

  6. #6
    Codefuzzy Avatar von Efraim
    Registriert seit
    Jun 2010
    Beiträge
    445
    Robust gegen zukünftige Updates sollte dies sein:
    Code:
    awk -F ',' '{gsub (/\r/,""); if (sub (/.*ping=/,"")){print $1}}'
    Der findet die Zahl nach ping= irgendwo (Felder durch Kommas getrennt) im String und löscht das elende Windows-Return selbst.

  7. #7
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6
    hmm habe mal die $player Variable prüfen wollen, habe diese mit say ausgegeben. Egebnis: Übereinstimmung in Binärdatei ( Standardeingabe )
    Ja da kann keiner eine Zahl finden

    ich fasse mal kurz zusammen:

    Sobald ein Spieler auf den server kommt, wird seine SteamID (unique) in der Variable $5 gespeichert.
    der lp Befehl spuckt eine liste aller spieler auf dem server aus:

    2015-04-06T20:49:26 173926.281 INF Telnet executed "lp" from: xx.xx.xx.226:53273
    1. id=8784, Sir xxx, pos=(1350.6, 62.4, -639.2), rot=(-7.0, 134.8, 0.0), remote=True, health=106, deaths=2, zombies=106, players=0, score=100, steamid=76561198xxxxxxxxx, ip=xxx.xxx.178.23, ping=76
    2. id=478, Jxx, pos=(1214.6, 94.9, -631.4), rot=(-19.7, -210.9, 0.0), remote=True, health=63, deaths=7, zombies=130, players=0, score=100, steamid=76561198xxxxxxxxx, ip=xxx.xxx.2.100, ping=180
    3. id=4061, Triplexxx, pos=(856.5, 78.3, 171.0), rot=(-38.0, -105.5, 0.0), remote=True, health=5, deaths=9, zombies=83, players=0, score=51, steamid=76561198xxxxxxxxx, ip=xx.xxx.148.205, ping=92
    4. id=11613, Knecht x, pos=(3449.9, 52.4, -2173.3), rot=(-16.7, -21.7, 0.0), remote=True, health=111, deaths=1, zombies=1056, players=1, score=1051, steamid=76561198xxxxxxxxx, ip=xxx.xx.164.164, ping=22
    5. id=8795, ^2xxx, pos=(-266.2, 33.4, 1040.5), rot=(-17.0, 294.0, 0.0), remote=True, health=25, deaths=21, zombies=553, players=0, score=476, steamid=76561198xxxxxxxxx, ip=xxx.xxx.x.118, ping=62
    6. id=361, Eiswölx, pos=(1592.1, 46.1, -1901.5), rot=(-28.1, -292.5, 0.0), remote=True, health=100, deaths=3, zombies=910, players=0, score=895, steamid=76561197xxxxxxxxx, ip=xx.xxx.251.182, ping=22
    7. id=203, Otxxx ☢ xxx ☢, pos=(-267.2, 32.3, 1041.3), rot=(-5.3, 289.7, 0.0), remote=True, health=54, deaths=27, zombies=259, players=0, score=162, steamid=76561198xxxxxxxxx, ip=xxx.xxx.0.10, ping=107
    8. id=360, xxxx, pos=(1592.3, 4.1, -1918.8), rot=(-8.6, -276.4, 0.0), remote=True, health=165, deaths=0, zombies=1395, players=1, score=1395, steamid=76561197xxxxxxxxx, ip=xxx.xxx.xx.162, ping=22
    9. id=84351, xxxxr, pos=(27.3, 66.0, 1886.0), rot=(-22.3, 13.3, 0.0), remote=True, health=100, deaths=0, zombies=0, players=0, score=0, steamid=76561197xxxxxxxxx, ip=xx.xx.19.181, ping=64
    10. id=22573, xxxxxx, pos=(-6416.3, 4.1, 6551.9), rot=(-19.7, -8.5, 0.0), remote=True, health=92, deaths=3, zombies=457, players=0, score=445, steamid=76561197xxxxxxxxx, ip=x.xxx.xx.232, ping=41
    11. id=10297, Don xxxxxxx, pos=(-6410.6, 4.1, 6556.6), rot=(-29.5, -68.9, 0.0), remote=True, health=69, deaths=2, zombies=163, players=0, score=153, steamid=76561197xxxxxxxxx, ip=x.xxx.74.232, ping=38
    Total of 11 in the game


    Mit folgendem befehl wird die Zeile des Spielers der den server betreten hat zugeordnet
    PLAYER=$(telnetCommand $1 "lp" | grep "$5" )

    wenn ich nun say $player einfüge spuckt er mir folgendes aus


    Übereinstimmung in Binärdatei ( Standardeingabe )

    Verstehe gar nichts mehr

    ja und von diesem Spieler aus dieser Zeile wird den Ping benötigt um die leute vom server zu kicken

  8. #8
    Codefuzzy Avatar von Efraim
    Registriert seit
    Jun 2010
    Beiträge
    445
    Ups, ich bemerke erst jetzt, dass es um Serverdinge geht. Da halte ich mich besser raus, weil keinen Plan davon.

    Vielleicht noch der Tipp auf das Tool strings, das Binärzeugs entfernt.

  9. #9
    Registrierter Benutzer
    Registriert seit
    Apr 2009
    Ort
    Erde
    Beiträge
    2.819
    nur so eine Anmerkung, es muss say $PLAYER statt say $player verwendet werden, jedenfalls wenn deine Schnippels stimmen...
    Gruß nopes
    (,,,)---(^.^)---(,,,) /var/log/messages | grep cat

  10. #10
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6
    Zitat Zitat von PR-X Beitrag anzeigen

    wenn ich nun say $player einfüge spuckt er mir folgendes aus
    2. id=171, Zxxxxxxr ☢ xx-x Admin ☢, pos=(-1018.4, 69.1, -86.5), rot=(-18.3, 11.3, 0.0), remote=True, health=74, deaths=3, zombies=56, players=1, score=41, steamid=76561198xxxxxxxxx, ip=xx.xxx.xx.226, ping=41


    so weit so gut

    PLAYER=$(telnetCommand $1 "lp" | grep "$5" )
    PING=$(echo $PLAYER | awk -F ',' '{gsub (/\r/,""); if (sub (/.*ping=/,"")){print $1}}' )

    klappt nun wunderbar ! Vielen Dank für die Hilfe !

    Sollte ich nun z.b death als variable speichern wollen, reicht es den o.g befehl in
    TODE=$(echo $PLAYER | awk -F ',' '{gsub (/\r/,""); if (sub (/.*death=/,"")){print $1}}' ) abzuändern???

  11. #11
    Codefuzzy Avatar von Efraim
    Registriert seit
    Jun 2010
    Beiträge
    445
    Jupp, reicht.

  12. #12
    Registrierter Benutzer
    Registriert seit
    Apr 2015
    Beiträge
    6
    Zitat Zitat von Efraim Beitrag anzeigen
    Jupp, reicht.
    Danke für Deine Hilfe !

Ähnliche Themen

  1. Bash, grep und der Output
    Von nalye im Forum Anwendungen Allgemein, Software
    Antworten: 6
    Letzter Beitrag: 12.08.10, 13:02
  2. BASH - mit find und grep Dateiinhalte überarbeiten
    Von einBot im Forum Linux Allgemein
    Antworten: 7
    Letzter Beitrag: 10.12.08, 12:17
  3. bash grep -v --- mehrere minus zeichen
    Von christophm im Forum Anwendungen Allgemein, Software
    Antworten: 3
    Letzter Beitrag: 04.06.08, 16:31
  4. Bash-Skript, grep und Variablen durchsuchen
    Von der_angler im Forum Linux Allgemein
    Antworten: 6
    Letzter Beitrag: 08.07.07, 19:48
  5. grep bash und $?
    Von Windoofsklicker im Forum Linux Allgemein
    Antworten: 3
    Letzter Beitrag: 29.08.02, 12:45

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •