다음 출력에서 마우스의 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
장치 이름에 괄호가 있을 수 있는 경우 마지막에서 두 번째 단어를 선택하는 것이 좋습니다.$(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
다음과 같습니다. 여기서는 일치하는 줄Mouse
과 괄호 안의 문자열을 찾습니다 .$1
일치에 성공하면 괄호 안의 내용이 저장되고 인쇄됩니다.grep + 잘라내기 + tr
$ bt-device --list grep Mouse | cut -d'(' -f2 | tr -d ')' 34:88:5D:3F:1B:88
여기서는
grep
관련 행을 찾고cut
두 번째(
정의된 필드(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