正規表現を使用してマウスMACアドレスを取得する

正規表現を使用してマウスMACアドレスを取得する

次の出力からマウスのMACアドレスを取得する最も便利な方法は何ですか?

~ ➜ bt-device --list
Added devices:
Logitech K811 (00:1F:20:EB:06:E0)
Plattan ADV Wireless (5C:EB:68:1F:D1:62)
Bluetooth Mouse M336/M337/M535 (34:88:5D:3F:1B:88)

これより短いものはありますか?

bt-device --list | grep Mouse | sed -e 's/^.*(\(.*\))$/\1/'
34:88:5D:3F:1B:88

次の構文を探しています。

bt-device --list | grep Mouse | xyztool '(' ')'

答え1

awkを使用して行を一致させ、(またはで区切られた単語に分割します)。 2番目の単語を選択するか、$2デバイス名に括弧がある場合は、最後から2番目の単語を選択することをお勧めします。$(NF-1)

awk -F '[()]' '/Mouse/{print $(NF-1)}'

答え2

grepPCRE() と一緒に使用-P:

bt-device --list | grep -Po 'Mouse\s.*?\(\K[^)]+'
  • Mouse\s.*?\(その行から一致し、Mouse最初の行まで一致する項目が削除されます(\K

  • [^)]+必要な部分、つまり次の文字を提供します。)

例:

$ cat file.txt
Added devices:
Logitech K811 (00:1F:20:EB:06:E0)
Plattan ADV Wireless (5C:EB:68:1F:D1:62)
Bluetooth Mouse M336/M337/M535 (34:88:5D:3F:1B:88)

$ grep -Po 'Mouse\s.*?\(\K[^)]+' file.txt
34:88:5D:3F:1B:88

答え3

いくつかのオプションがあります:

  1. 真珠

    $ bt-device --list | perl -lne 'print $1 if /Mouse.*\((.*)\)/' file 
    34:88:5D:3F:1B:88
    

    正規表現を使用する多くのツールは、後で使用できる()方法で一致するパターンをキャプチャするために括弧()を使用します。 Perlでキャプチャされた最初のパターンはで$1、2番目のパターンは$2次のようになります。ここでは、一致する行Mouseと括弧内の文字列を探します。$1一致に成功すると、括弧内の内容が保存され印刷されます。

  2. grep + 切り取り + tr

    $ bt-device --list grep Mouse | cut -d'(' -f2 | tr -d ')'
    34:88:5D:3F:1B:88
    

    ここではgrep、関連する行を見つけて、cut2番目の(定義済みフィールド(34:88:5D:3F:1B:88))を印刷し、tr末尾を削除するために使用します)

  3. 面白い解決策は次のとおりですjoin

    $ join -1 1 -2 2 -o 2.4 <(echo "Mouse (") <(bt-device --list) 2>/dev/null | tr -d '()'
    34:88:5D:3F:1B:88
    

関連情報