J'essaye d'écrire un script bash pour analyser le fichier journal suivant et me donner une liste des joueurs ACTUELS dans la salle (donc en ignorant les joueurs qui sont partis, mais en incluant les joueurs qui ont peut-être rejoint) . Notez que Samual a rejoint.Analyser les joueurs actuellement dans le lobby
[Sun Nov 15 14:12:50 2009] [GAME: Tower Defense Join Fast!] player [Samual|192.168.1.115] joined the game
[Sun Nov 15 14:12:54 2009] [GAME: Tower Defense Join Fast!] deleting player [Samual]: has left the game voluntarily
[Sun Nov 15 14:12:57 2009] [GAME: Tower Defense Join Fast!] player [Jack|192.168.1.121] joined the game
[Sun Nov 15 14:13:04 2009] [GAME: Tower Defense Join Fast!] player [NoobLand|192.168.1.153] is trying to join the game but is banned by IP address
[Sun Nov 15 14:13:04 2009] [GAME: Tower Defense Join Fast!] [Local]: User [NoobLand] was banned on server [www.example.com] on 2009-11-04 by [Owner] because [].
[Sun Nov 15 14:13:13 2009] [GAME: Tower Defense Join Fast!] player [Jones|192.168.1.178] joined the game
[Sun Nov 15 14:13:21 2009] [GAME: Tower Defense Join Fast!] player [Arnold|192.168.1.126] joined the game
[Sun Nov 15 14:13:35 2009] [GAME: Tower Defense Join Fast!] [Local]: Autokicking player [Arnold] for excessive ping of 131.
[Sun Nov 15 14:13:35 2009] [GAME: Tower Defense Join Fast!] deleting player [Arnold]: was autokicked for excessive ping of 131
[Sun Nov 15 14:13:44 2009] [GAME: Tower Defense Join Fast!] [Lobby] [Jones]: !chekme
[Sun Nov 15 14:13:44 2009] [GAME: Tower Defense Join Fast!] non-spoofchecked user [Jones] sent command [chekme] with payload []
[Sun Nov 15 14:13:45 2009] [GAME: Tower Defense Join Fast!] [Local]: Waiting for 4 more players before the game will automatically start.
[Sun Nov 15 14:14:05 2009] [GAME: Tower Defense Join Fast!] player [Samual|192.168.1.116] joined the game
Pour me donner une liste des joueurs actuellement dans la salle comme ça (je peux probablement utiliser tr pour le commutateur de cas):
'jack','jones','samual'
Lorsqu'un joueur rejoint il va dire « joueur [Playername | PlayerIP] a rejoint le jeu "(vous pouvez ignorer l'IP Lorsqu'un joueur laisse dira." joueur de suppression [Playername]: Certains RaisonBien que je sache comment obtenir ces deux listes individuellement, j'ai besoin de les combiner pour savoir qui est encore dans la pièce, et l'ordre est important parce qu'ils peuvent rejoindre. Est-ce que quelqu'un peut m'aider avec ça?
J'ai cette déclaration sed pour me donner les joueurs qui ont rejoint:
sed -n 's/\[.*\] \[GAME: .*\] player \[\(.*\)|.*\] joined the game/\1/p`
et cela me donne une liste des sortants:
sed -n 's/\[.*\] \[GAME: .*\] deleting player \[\(.*\)\].*/\1/p'
Mais ne sais pas comment combiner les deux, ou de mettre les tiques et les virgules dans la liste des joueurs.
Merci
Perl fonctionnerait, mais je n'ai aucune expérience avec elle aurait donc besoin de beaucoup d'aide. La forme actuelle du script récupère les 1000 dernières lignes d'un fichier journal actif appelé ghost.log. Ensuite, il trouve le jeu le plus récent que j'ai "Propriétaire" rejoint, et le filtre à juste une liste d'éléments liés à ce nom de famille. Ensuite, je veux une liste de joueurs actuellement dans le jeu que je suis. De là, je dois interroger ma base de données sqlite3 où la liste des noms est l'une des déclarations "where". Dois-je utiliser Perl pour tout cela? Ou est-ce que bash appelle un script perl séparé pour faire l'analyse? Comment ferais-je cela? – Dan
J'ai été capable de lire la plupart de ceci. Je comprends aussi la plupart des regex ... mais qu'est-ce que c'est:? et le :?. Pourquoi la parathèse centrale n'est-elle pas de $ 2, et l'instruction if est-elle vraie pour les lignes qui en contiennent? Que représente le premier (/ et le dernier /)? – Dan
OK, le premier '?:' Fait partie d'une construction '(?: ...)'. Cela fait du clustering plutôt que de la capture. Cela signifie que les contenus sont traités dans leur ensemble, mais ne sont pas affectés à la variable '$ 2'. La raison en est que nous ne nous soucions pas de ce qu'est le contenu, mais nous voulons que le signe '?' Suivant fonctionne sur tout le bloc. Lorsque vous mettez un caractère après?? 'Après ou un seul caractère, cela indique que le groupe ou le caractère est facultatif. Ici nous l'utilisons pour dire que wn adresse IP (la chose dans la construction '(?: ...)') peut être présente ou absente. En outre, le ':?' Plus tard: un deux-points peut ou peut ne pas être présent. – Tim