所以我從遊戲服務器10,000+線消息的這個文件,像這樣:正則表達式匹配出現
23年7月11日8時40分十六秒[INFO] NC:移動違規: wolfman98從yasmp (-90.8,64.0,167.5)至(-90.7,64.0,167.3)距離(0.0,0.0,0.2)
11.07.23 10:57:44 NC:移動違規:AKxiZeroDark (-1228.3,11.2,1098.7)至(-1228.3,11.2,1098.7)距離(0.0,0.0, 0.0)
目前正則表達式的代碼,我是:\d{1,4}\.\d{1}
,迄今一切都在大膽的匹配:
23年7月11日8點40分十六秒 [信息] NC:移動侵犯:從yasmp wolfman98( - 90.8,64.0,167.5)至( - 90.7,64.0,167.3)距離(0.0,0.0,0.2)
的Ive無法找到一種方式來獲得,只有說,部分:
(-1228.3,11.2,1098.7)至(-1228.3,11.2,1098.7)
的「距離」字之前,並沒有在一開始的時間戳,並最終取代它落得這樣的:
23年7月11日8時40分一十六秒[INFO] NC:移動違規:從yasmp wolfman98 ( - #,#,#)到( - #,#,#)距離(0.0,0.0,0.2 )
23年7月11日10時57分44秒[INFO] NC:移動違規:從yasmp AKxiZeroDark( - #,#,#)到( - #,#,#)距離(0.0, 0.0,0.0)
並且有一些額外的信息,數字可以是否定的,範圍從1.0數字到1234.0位,這就是爲什麼我需要再次匹配單詞「距離」之前的幫助。
編輯:甚至,這將是罰款,如果整個事情沒有顯示了:
23年7月11日8時40分16秒] [INFO NC:移動侵犯:從yasmp 距離wolfman98(0.0 ,0.0,0.2)
11.07.23 10:57:44 [信息] NC:移動違規:AKxiZeroDark from yasmp distance(0.0,0.0,0。0)
然後,你可以使用這個正則表達式通過提取現在匹配的數字,用散列替換數字,然後重構日誌行來用哈希替換數字:'perl -ne'/ ^(。*)(\((?: (?:,?\ d {1,4} \。\ d {1}(?:,| \))){3} (?:,| \))){3})(?= distance)(。*)$/&& do {my($ pre,$ no_numbers,$ post)=($ 1,$ 2,$ 3) $ no_numbers =〜s/\ d + \。\ d + /#/ g;打印「$ pre $ no_numbers $ post \ n」; }'' – aparker42