Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在日志文件中查找特定的mac地址_Python_Regex_Linux_Mac Address_Logfile - Fatal编程技术网

Python-在日志文件中查找特定的mac地址

Python-在日志文件中查找特定的mac地址,python,regex,linux,mac-address,logfile,Python,Regex,Linux,Mac Address,Logfile,我想从可以以不同格式显示的日志文件中提取特定的Mac地址 例如,在这三行上: Jun 16 10:24:28(2248)登录确定:cli 88-c9-d0-fd-13-65通过TLS隧道) Jun 16 10:24:35(2258)登录确定:cli f8:a9:d0:72:0a:dd通过TLS隧道) Jun 16 10:24:44(2273)登录确定:cli 485a.3f12.a35a通过TLS隧道) 使用此正则表达式: ([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:

我想从可以以不同格式显示的日志文件中提取特定的Mac地址

例如,在这三行上:

Jun 16 10:24:28(2248)登录确定:cli 88-c9-d0-fd-13-65通过TLS隧道)

Jun 16 10:24:35(2258)登录确定:cli f8:a9:d0:72:0a:dd通过TLS隧道)

Jun 16 10:24:44(2273)登录确定:cli 485a.3f12.a35a通过TLS隧道)

使用此正则表达式:

([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2} 
我可以在linux命令less中显示所有mac地址

假设搜索48:5a:3f:12:a3:5a,如何在Python中对特定mac地址应用相同的语法

我试着写这样的东西:

regex = re.compile(r'([[:xdigit:]]{2}[:.-]?){5}[[:xdigit:]]{2}')

for line in file:
   match = regex.search(line)
但显然它不起作用。

您可以使用

r'\b[a-f0-9]{2}(?:([:-]?)[a-f0-9]{2}(?:\1[a-f0-9]{2}){4}|(?:\.?[a-f0-9]{2}){5})\b'
请参阅(使用
re.I
标志编译regex对象)

说明

  • \b
    -前导词边界
  • [a-f0-9]{2}
    -2个数字
  • (?:
    -使用两种可选模式启动非捕获组:
    • ([:-]?)[a-f0-9]{2}(?:\1[a-f0-9]{2}{4}
      • ([:-]?)
        -第1组捕获的分隔符是
        -
      • [a-f0-9]{2}
        -2个数字
      • (?:\1[a-f0-9]{2}){4}
        -1组和2组xdigits中定界符的4个序列
    • |
      -或
    • (?:\.?[a-f0-9]{2}{5})
      -5个可选(1或9)点序列(
      \.?
      )和2个xdigits
  • \b
    -尾随词边界
:


是否要在文件中查找特定的MAC地址?如果是这样的话,
cat exampleFile | grep examplemaaddress
对你有用吗?如果我理解正确,你要找的是
48[:.-]?5a[:.-]?3f[:-]?12[:-]?a3[:-]?5a
?如果答案是肯定的,您可能应该看看一些正则表达式教程。我正在寻找48:5a:3f:12:a3:5a,但它可能以485a.3f12.a35a或48-5a-3f-12-a3-5a的格式出现
import re
p = re.compile(r'\b[a-f0-9]{2}(?:([:-]?)[a-f0-9]{2}(?:\1[a-f0-9]{2}){4}|(?:\.?[a-f0-9]{2}){5})\b', re.IGNORECASE)
s = "Jun 16 10:24:28 (2248) Login OK: cli 88-c9-d0-fd-13-65 via TLS tunnel)\nJun 16 10:24:35 (2258) Login OK: cli f8:a9:d0:72:0a:dd via TLS tunnel)\nJun 16 10:24:44 (2273) Login OK: cli 485a.3f12.a35a via TLS tunnel)"
print([x.group() for x in p.finditer(s)])
# =>  ['88-c9-d0-fd-13-65', 'f8:a9:d0:72:0a:dd', '485a.3f12.a35a']