需要在bash中解析日志文件
发布时间:2020-12-15 22:27:38 所属栏目:安全 来源:网络整理
导读:我有一个包含大量文本的日志文件,其中一些是无用的.在这个日志中有一些对我很重要的行.这些行的模式是: 0x00000001 (NEEDED) Shared library: [libm.so.6] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x00000001 (NEEDED) Shared library: [ld.so.1]
我有一个包含大量文本的日志文件,其中一些是无用的.在这个日志中有一些对我很重要的行.这些行的模式是:
0x00000001 (NEEDED) Shared library: [libm.so.6] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x00000001 (NEEDED) Shared library: [ld.so.1] 0x00000001 (NEEDED) Shared library: [libgcc_s.so.1] 可以在对我来说很重要的所有行上找到NEEDED关键字. []之间的关键字对我来说很重要.我需要创建所有这些字符串的列表,而不重复它们. 我在Python上做过这个,但看起来在机器上我想运行脚本没有Python可用,所以我需要在bash中重写脚本.我只知道bash中的基本内容,但我无法找到解决问题的方法. 我用过的Python脚本是: import sys import re def testForKeyword(keyword,line): findStuff = re.compile(r"b%sb" % keyword, flags=re.IGNORECASE) if findStuff.search(line): return True else: return False # Get filename argument if len(sys.argv) != 2: print("USAGE: python libraryParser.py <log_file.log>") sys.exit(-1) file = open(sys.argv[1],"r") sharedLibraries = [] for line in file: if testForKeyword("NEEDED",line): libraryNameStart = line.find("[") + 1 libraryNameFinish = line.find("]") libraryName = line[libraryNameStart:libraryNameFinish] # No duplicates,only add if it does not exist try: sharedLibraries.index(libraryName) except ValueError: sharedLibraries.append(libraryName) for library in sharedLibraries: print(library) 你能帮我解决这个问题吗? 解决方法
使用awk假设infile有问题数据的一种方法:
awk ' $2 ~ /NEEDED/ { lib = substr( $NF,2,length($NF) - 2 ); libs[ lib ] = 1; } END { for (lib in libs) { printf "%sn",lib; } } ' infile 输出: libc.so.6 libgcc_s.so.1 ld.so.1 libm.so.6 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |