python - 使用 Python 过滤 Linux 日志文件

标签 python regex linux filter

我想过滤日志文件以保持所有行都匹配特定模式。我想用 Python 做到这一点。

这是我的第一次尝试:

#!/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 的,也是关于完成这个特定结果的。)

好的,这是我到目前为止的想法......但是你如何做相当于在下面的行中添加一个 r

re.compile(r"\s*")

在下一行中,字符串不是字符串文字?

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)

这可以很容易地改进吗?

最佳答案

好吧,你知道的,你已经自己回答了大部分问题:)

对于正则表达式匹配,使用 re module (该文档有很好的解释性示例)。

您已经使用open() 函数打开文件。使用相同的功能打开文件进行写入,只需提供相应的mode参数(如果需要,“w”或“a”与“+”组合,参见help(open) 在 Python 交互式 shell 中)。就是这样。

关于python - 使用 Python 过滤 Linux 日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21593730/

相关文章:

python - 提高 float 的准确性

python - 在给定日期对 Python 系列或数据帧重新采样

r - 排除某个字符串第二次出现后的所有内容

c++ - Visual Studio 正则表达式

python - 从另一个 Python 进程调用操作系统的 Python 可执行文件

c - Linux 删除 root 权限 - C 脚本

python - 使用 gtk 对话框选择器小部件列出远程目标的文件

java - 如何检查字符串末尾是否有某些数字,如果存在则将其加 1?

regex - perl - 提取字符串列表

python - 如何为 tkinter 标签提供相同的尺寸?