【问题标题】:Grep Regex for Mac Address用于 Mac 地址的 Grep 正则表达式
【发布时间】:2012-04-25 14:40:19
【问题描述】:

我需要使用正则表达式来从大文件中提取 mac 地址的帮助。

这是文件的格式:

Wed Apr 25 10:15:32 EDT 2012 Client: 00aa11bb22cc mac
Wed Apr 25 10:15:34 EDT 2012 Client: aa11bb22cc33 pc

这是我目前没有运气的尝试:

grep -io '[0-9a-f]{12}' file.txt > macs.txt

有什么想法吗?我只想将mac地址部分提取到名为macs.txt的文件中。

【问题讨论】:

    标签: regex linux bash grep


    【解决方案1】:

    试试:

    grep -io '[0-9a-f]\{12\}' file.txt > macs.txt
    

    【讨论】:

    • 该死的我就知道我很接近了!哈哈 非常感谢,我没有意识到我必须逃避括号......
    • 有一本 O'Reilly 的书(简而言之 Unix),我经常参考实用程序之间模式匹配的变化。这种特殊的变化在我的脑海中是新鲜的
    • 您也可以使用不需要-i选项的[:xdigit:]character classgrep -o '[[:xdigit:]]\{12\}'
    • @glennjackman:不错的提示,不知道有一个十六进制字符类
    • 为了完整起见,您可能希望将数字组扩展为 [0-9a-fA-F]
    【解决方案2】:
    ((([0-9a-fA-F]{2})[ :-]){5}[0-9a-fA-F]{2})|(([0-9a-fA-F]){6}[
    :-]([0-9a-fA-F]){6})|([0-9a-fA-F]{12})
    

    我根据我知道的 MAC 地址的以下表达式对其进行了测试。根据 系统、固件和应用程序的语法。

    F3 D3 A4 C1 99 E2
    F3:D3:A4:C1:99:E2
    F3-D3-A4-C1-99-E2
    f3 d3 a4 c1 99 e2
    f3:d3:a4:c1:99:e2
    f3-d3-a4-c1-99-e2
    f3d3a4 c199e2
    f3d3a4:c199e2
    f3d3a4-c199e2
    f3d3a4c199e2
    F3D3A4C199E2
    

    【讨论】:

      【解决方案3】:

      一种使用sed的方式:

      sed -e 's/^.*\([a-fA-F0-9]\{12\}\).*$/\1/' file.txt > macs.txt
      

      结果:

      00aa11bb22cc
      aa11bb22cc33
      

      【讨论】:

      • 谢谢,这也很好用。知道这是否比 grep 快吗?我的日志文件相当大...
      • @Alex_Hyzer_Kenoyer:我不这么认为。据我所知sed 相当快,但grep 通常是一个大赌注。
      【解决方案4】:

      egrep 可以工作:

      egrep -io '[0-9a-f]{12}' file.txt > macs.txt
      

      grep 有 2 个选项来处理正则表达式,

      grep -e 
      

      grep -E
      

      其中一个等于 egrep,我想现在你知道是哪个了。 :)

      【讨论】:

      • 如何将它与管道一起使用?喜欢猫txt | grep mac
      • 你试过`cat txt | egrep -io '[0-9a-f]{12}'?问题出在哪里?
      【解决方案5】:

      此命令行将从常规文件中提取所有 MAC 地址。它适用于 macOS。

      它从常规文件中提取其上的任何 MAC 地址。在示例中,常规文件file.txt 具有混合信息,包括 MAC 地址。以下命令将提取它们并将它们保存在macs.txt 文件中。

      grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' file.txt > macs.txt

      【讨论】:

      • 请描述它的作用以及它如何提供帮助。
      • 事实上,这是一个大胆的声明。如果您对Henrik's answer 中的示例数据使用正则表达式,它只会返回两行。
      猜你喜欢
      • 1970-01-01
      • 2011-07-14
      • 2022-01-13
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2011-05-14
      • 2023-01-12
      相关资源
      最近更新 更多