Korzystam z GeekTool, który pobiera dane wyjściowe poleceń terminala i zamienia je w widżety pulpitu, i chciałem wyświetlić aktualny procent baterii mojej klawiatury bluetooth na pulpicie w postaci
Bateria klawiatury: (procentowa wartość baterii)
Aby to osiągnąć, używam polecenia
ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='
który jest z tej strony.
Jednak, jak wspomniano na tej stronie, to polecenie wyświetla ten niezbyt czysty tekst (tak, muszę wymienić baterie):
| | | | "BatteryPercent" = 17
(Więc dla tego wejścia chcę wynik Keyboard Battery: 17
.) Dlatego moje pytanie brzmi: w jaki sposób przekonwertować to na zamierzony format „Bateria klawiatury: (Wartość procentowa baterii) ” za pomocą wiersza polecenia?
EDYCJA: Znalazłem inny sposób, aby pokazać procent baterii, używając Ubersicht zamiast GeekTool, dziękuję wszystkim za pomoc
macos
command-line
text-manipulation
D4rKP01s0n
źródło
źródło
Keyboard Battery: 17
czyKeyboard Battery: (17)
? Tj. Czy chcesz dosłowne nawiasy wyjściowe?Odpowiedzi:
Proszę przeczytać, zrozumieć i potwierdzić to pytanie:
Ponieważ chcesz uzyskać wynik
Keyboard Battery: 17
, którego nie da żadna z dotychczas opublikowanych odpowiedzi, możeszOprzyj się na odpowiedzi jehada :
Jeśliioreg
polecenie wyświetla tylkoBatteryPercent
linię, toAle jeśli, jak podejrzewam,
ioreg -c AppleBluetoothHIDKeyboard
polecenie wypisuje inne wiersze (zawierające liczby), oprócz"BatteryPercent" =
wiersza, wówczas powyższe polecenie wypisze również wiele innych wierszy z liczbami.Jeśli, jak masz pośrednio potwierdził, że
ioreg
wyjścia polecenia inne linie (które zawierają numery), a następniePoprawiona odpowiedź jehada może działać, jeśli
ioreg
polecenie wypisuje tylkoBatteryPercent
wiersz, chociaż może wymagać niewielkich zmian.Budowanie na odpowiedź Buffalo Rabor za :
Poprawiona odpowiedź Buffalo Rabora będzie działać, pod warunkiem, że zawiera ona jawne nawiasy wyjściowe. Ale można to uprościć - prawie nigdy nie trzeba podłączać
grep
doawk
:PS
Nie mam też komputera Mac, więc nie mogę mieć pewności, co będzie dla ciebie działać, a co nie.
źródło
([[:digit:]]*)
stała się\([[:digit:]]*\)
.='|awk
, prawdopodobnie źle wpisałeś cytaty.Aby uzyskać tylko numer, zmień „
grep
” w swoim przykładzie na:To powinno zadziałać (przynajmniej składnia grep z pewnością zadziała na Linuksie), ale nie mam komputera Mac, więc może być konieczne jego nieco zmodyfikowanie, aby działało.
Wyjaśnienie:
Dlatego to polecenie grep znajdzie tylko część liczbową ciągu wyjściowego.
..
EDYTOWANE ... po drugim czytaniu wygląda na to, że potrzebujesz numeru dołączonego na końcu „Baterii klawiatury:”, więc oto rozwiązanie wykorzystujące sed:
W takim przypadku zamieniasz oryginalny ciąg znaków na taki, który zaczyna się od „Bateria klawiatury:”.
Znowu mam nadzieję, że działa na Macu!
źródło
sed 's/.* \([0-9][0-9]*\).*/Keyboard Battery: \1/'
.[0-9]+
lub możesz użyć jeszcze krótszej ręki\d+
. Z mojego doświadczenia[[:digit:]]
wynika, że bardziej wszechstronna klasa jest szeroko wspierana (tak jak mówię, nie mam komputera Mac, więc chciałem czegoś bardziej prawdopodobnego). Powodem[[:digit:]]*
mojej odpowiedzi (zamiast[[:digit:]]+
) jest to, że nie znam możliwego wynikuioreg
, więc najlepiej mieć dopasowanie niż brak dopasowania (brak dopasowania zwróci tylko oryginalny ciąg).sed
nie rozpoznaje+
. Ponadto nie rozpoznaje\d
. Problem z RE * polega na tym, że może on pasować do łańcucha zerowego. Nie rozumiem, dlaczego wolisz, aby nie dorównać; jeśli twoja[[:digit:]]*
wartość\1
jest pusta, oznacza to, że twoja wartość jest pusta i zmieniasz linię wejściową (prawdopodobnie odrzucasz liczbę gdzie indziej w linii). Uważam też, żesed
traktuje to(
i)
jako znaki inne niż specjalne, i potrzebuje\(
…\)
uchwycenia podłańcucha (→\1
). … (Ciąg dalszy):
się dwukrotnie w łańcuch zastępczy . Jest to również;
niepotrzebne.rura do awk ...
lub
źródło