【问题标题】:Returns a part of a result (GREP)返回结果的一部分 (GREP)
【发布时间】:2012-11-01 00:07:44
【问题描述】:

有了这个命令,我想要一个命令只获取当前的mac地址,另一个命令只获取永久的mac。所以我必须使用grep表达式,但我不知道该怎么做。

    $ macchanger -s wlan0
    Permanent MAC: 14:25:47:ff:c4:aa (Twinhan)
    Current MAC: 00:24:54:f0:5c:cc (unknown)

所以我真的很想做类似 macchanger -s wlan0 | grep ...为了准确得到 14:25:47:ff:c4:aa 还有另一个获取 00:24:54:f0:5c:cc 的命令 谢谢你

【问题讨论】:

    标签: regex linux shell grep


    【解决方案1】:

    获取“永久”行:

    macchanger -s wlan0 | awk '/Permanent/ { print $3 }'
    

    获取“当前”行:

    macchanger -s wlan0 | awk '/Current/ { print $3 }'
    

    【讨论】:

    • 谢谢,这是处理问题的最佳方式 x) 我不知道 awk,它似乎真的很有用。
    【解决方案2】:

    我认为使用sed 比使用grep 更好:

    macchanger -s wlan0 | sed -n '/^Permanent/s/Permanent MAC: \([0-9a-fA-F:]*\) .*/\1/p'
    macchanger -s wlan0 | sed -n '/^Current/s/Current MAC: \([0-9a-fA-F:]*\) .*/\1/p'
    

    这适用于符合 POSIX 的sed; GNU sed 有时有自己的想法,但它接受这些并按预期工作。

    【讨论】:

    • 没有理由在 s/// 表达式之外匹配 ^Permanent。如果您想确保它被锚定,只需将 ^ 添加到 s/// 表达式的模式匹配的开头即可。
    【解决方案3】:

    如果你想要 grep:

    macchanger -s wlan0 | grep Permanent | grep -P -o '..:..:..:..:..:..'
    macchanger -s wlan0 | grep Current | grep -P -o '..:..:..:..:..:..'
    

    【讨论】:

      【解决方案4】:

      每个地址都有一个grep

      grep -P -o '(?<=Permanent MAC: )[a-zA-Z0-9:]+'
      grep -P -o '(?<=Current MAC: )[a-zA-Z0-9:]+'
      

      【讨论】:

        【解决方案5】:

        grep-o 选项可以满足您的需求。例如:

        grep -o '[0-9a-f:]\{17\}'
        

        【讨论】:

        • 这样每次都会获取两个地址。
        • 是的。从最初的问题中我不清楚这是否是需要的。编辑:虽然如果我更仔细地阅读它,我想它很清楚。 :-)
        【解决方案6】:

        此解决方案取决于输出中结果的顺序:

        declare -a results
        results=($(macchangher -s wlan0 | egrep -oi '([a-f0-9]{2}:){5}[a-f0-9]{2}'))
        perm=$results[0]
        cur=$results[1]
        

        【讨论】:

          猜你喜欢
          • 2017-03-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多