次の出力からマウスの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
grep
PCRE() と一緒に使用-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
いくつかのオプションがあります:
真珠
$ bt-device --list | perl -lne 'print $1 if /Mouse.*\((.*)\)/' file 34:88:5D:3F:1B:88
正規表現を使用する多くのツールは、後で使用できる
()
方法で一致するパターンをキャプチャするために括弧()を使用します。 Perlでキャプチャされた最初のパターンはで$1
、2番目のパターンは$2
次のようになります。ここでは、一致する行Mouse
と括弧内の文字列を探します。$1
一致に成功すると、括弧内の内容が保存され印刷されます。grep + 切り取り + tr
$ bt-device --list grep Mouse | cut -d'(' -f2 | tr -d ')' 34:88:5D:3F:1B:88
ここでは
grep
、関連する行を見つけて、cut
2番目の(
定義済みフィールド(34:88:5D:3F:1B:88)
)を印刷し、tr
末尾を削除するために使用します)
。面白い解決策は次のとおりです
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