我正在嘗試編寫一個bash腳本來解析出以下日誌文件,並給我一個當前玩家在房間中的列表(因此忽略了剩下的玩家,但包括可能已經重新加入的玩家) 。請注意,Samual已經重新加入。解析當前在大廳的玩家
[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
給我的球員名單目前在房間裏像這樣(我大概可以使用的情況下開關TR):
'jack','jones','samual'
當玩家加入,它會說「播放器[Playername | PlayerIP]加入了遊戲 「(你可以忽略IP 有玩家離開時,它會說。」 刪除播放器[Playername]:某種原因
雖然我知道如何分別獲得這兩個列表,但我需要將它們結合起來,以便弄清楚誰仍在房間中,而順序很重要,因爲他們可以重新加入。誰能幫我這個?
我有這個sed的說法,給我誰也加入了玩家:
sed -n 's/\[.*\] \[GAME: .*\] player \[\(.*\)|.*\] joined the game/\1/p`
,這給我的畢業生名單:
sed -n 's/\[.*\] \[GAME: .*\] deleting player \[\(.*\)\].*/\1/p'
但不知道如何結合這兩個,或者把蜱和逗號放在玩家名單中。
謝謝
的Perl的工作,但我沒有任何經驗因此需要很多幫助。腳本的當前形式抓取名爲ghost.log的最近1000行活動日誌文件。然後找到我「所有者」加入的最新遊戲,並將其過濾爲與該遊戲名稱相關的項目列表。然後,我想要一個當前在遊戲中的玩家列表,而不是我所處的列表。從那裏我需要查詢我的sqlite3數據庫,其中名稱列表是「where」語句之一。我應該用perl來做這些嗎?或者讓bash調用一個單獨的perl腳本來進行解析?我將如何做到這一點? – Dan 2009-11-15 22:30:02
我已經閱讀了大部分內容。我也理解大多數正則表達式...但是:什麼是:?和:?。爲什麼中間語言不是2美元,if語句對於包含該語句的行是否正確?第一個(和最後一個/)代表什麼? – Dan 2009-11-16 19:40:31
好的,第一個'?:'是'(?:...)'結構的一部分。這是集羣化,而不是捕獲。這意味着內容被視爲一個整體,但不會被分配到$ 2變量。原因是我們不在乎內容是什麼,但我們確實希望在整個塊上運行以下'?'符號。當你在組或單個字符後面加上一個'?'時,說組或字符是可選的。這裏我們用它來說明IP地址('(?:...)'結構中的東西)可以存在或不存在。此外,後面的':?':冒號可能存在也可能不存在。 – Tim 2009-11-16 20:29:23