我想過濾日誌文件以保持所有行匹配特定模式。我想用Python來做到這一點。使用Python過濾Linux日誌文件
這是我第一次嘗試:
#!/usr/bin/env python
from sys import argv
script, filename = argv
with open(filename) as f:
for line in f:
try:
e = line.index("some_term_I_want_to_match")
except:
pass
else:
print(line)
我怎樣才能提高這:
- 結果保存到類似的名稱(例如,不同的擴展名)
- 使用的一個新的文件正則表達式使其更加靈活/強大。
(我剛開始學習Python的。這個問題是儘可能多地學習Python的,因爲它是實現這一特定結果。)
確定,這裏就是我想出了那麼遠,但你如何做以下行
re.compile(r"\s*")
在字符串不一個字符串前置一個r
如,在下一行的相同呢?
re.compile(a_string_variable)
除此之外,我覺得這個更新版本做這項工作:
#!/usr/bin/env python
from sys import argv
import re
import os
import argparse #requires Python 2.7 or above
parser = argparse.ArgumentParser(description='filters a text file on the search phrase')
parser.add_argument('-s','--search', help='search phrase or keyword to match',required=True)
parser.add_argument('-f','--filename', help='input file name',required=True)
parser.add_argument('-v','--verbose', help='display output to the screen too', required=False, action="store_true")
args = parser.parse_args()
keyword = args.search
original_file = args.filename
verbose = args.verbose
base_file, ext = os.path.splitext(original_file)
new_file = base_file + ".filtered" + ext
regex_c = re.compile(keyword)
with open(original_file) as fi:
with open(new_file, 'w') as fo:
for line in fi:
result = regex_c.search(line)
if(result):
fo.write(line)
if(verbose):
print(line)
這能容易地改進?
爲什麼不使用'grep'?如果你想使用正則表達式並堅持用Python寫這個,看看're'模塊。 – Blender
在我看來,這裏不需要'嘗試......除外'。 – squiguy
我更新了我的問題。我想用Python做這件事,因爲我正在學習Python。 – MountainX