adb shell
나는 및 grep
(내 Android 장치의 내부 grep)을 사용하여 Android 장치의 로컬 IP 주소를 찾기 위한 플랫폼 독립적인 한 줄 솔루션을 만들려고 합니다 . 작동하는 솔루션이 있지만 뭔가 문제가 있습니다.
그런데, 저는 Powershell 7에서 솔루션을 실행하고 있습니다. 차이가 있다면 말이죠.
이것이 내 해결책입니다.
> adb shell "ip addr show wlan0 | grep -e 'inet[^6]'"
inet 192.168.0.19/22 brd 192.168.3.255 scope global wlan0
작동하지만 필터링을 위한 문자 클래스로 사용할 수 없으므로 \d
더 좋습니다.
내가 선호하는 솔루션은 IP 주소만 표시하고 다른 내용은 표시하지 않는 것입니다. 이것이 내가 할 수 있는 최선이다:
> adb shell "ip addr show wlan0 | grep -o '^ inet [0-9][0-9][0-9].[0-9][0-9][0-9].[0-9]'"
inet 192.168.0
Android는 제한된 터미널 설정과 함께 제공되는 것으로 보이며 "toybox"를 사용하여 일반적인 bash 도구를 에뮬레이션합니다. 그러나 그것들은 매우 제한적이며 많은 문서를 제공하지 않습니다.
숫자 문자 클래스나 수량자를 사용할 수 없기 때문에 라인만 필터링할 수 있고 을 사용하는 것이 -o
정보를 출력하는 유일한 방법입니다. 따라서 내가 선호하는 솔루션은 구현이 사실상 불가능합니다.
이 제한된 도구 세트를 사용하여 로컬 IP 주소를 어떻게 추출합니까?
답변1
표현식의 일부 grep
가 아닌 로컬로 실행할 수 있습니다 .adb
$ adb shell "ip addr show wlan0" |
grep -o -P '^ *inet \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'
inet 192.168.1.167
거기에 있는 옵션은 을 -P
의미하며 이스케이프를 지원하는 데 필요 --perl-regexp
합니다 \d
.
awk
다음과 같은 조합을 사용할 수도 있습니다 cut
.
$ adb shell "ip addr show wlan0 | awk '\$1 == \"inet\" {print \$2}' | cut -f1 -d/"
192.168.1.167
$1
로컬 쉘이 로컬로 확장되는 것을 방지하기 위해 거기에는 많은 탈출구가 있습니다 .
또는 grep
및 같은 기존 도구를 잊어버리고 awk
JSON 및 다음을 사용하여 수행하세요 jq
.
$ adb shell "ip -j addr show wlan0" | jq -r '.[]|select(.ifname).addr_info[]|select(.family=="inet").local'
192.168.1.167