2

Я использую GeekTool, который принимает выходные команды терминала и превращает их в виджеты рабочего стола, и хотел отобразить текущий процент заряда батареи моей bluetooth-клавиатуры на рабочем столе в виде

Keyboard Battery: (Battery percent value)

Для этого я использую команду

ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='

который с этого сайта.

Однако, как упоминалось на этом веб-сайте, эта команда выводит этот не очень чистый на вид текст (да, мне нужно поменять батарейки):

| |   |   |   "BatteryPercent" = 17

(Итак, для этого входа я хочу, чтобы батарея клавиатуры выводила Keyboard Battery: 17 )  Поэтому мой вопрос заключается в том, как я могу преобразовать это в мой предполагаемый формат «Батарея клавиатуры: (значение процента батареи) » через командную строку?

РЕДАКТИРОВАТЬ: я нашел другой способ показать процент батареи, используя Ubersicht вместо GeekTool, спасибо всем за вашу помощь

3 ответа3

1

Чтобы получить только число, измените « grep » в вашем примере на следующее:

grep -oE '[0-9]+'

Это должно работать (по крайней мере, синтаксис grep, безусловно, будет работать в Linux), но у меня нет Mac, поэтому, возможно, вам придется немного его настроить, чтобы заставить его работать.

Объяснение:

  • Приведенный выше grep извлекает только числовую часть выходных данных.
  • Опция 'o' гласит: показывать ТОЛЬКО совпадение.
  • Опция «E» говорит использовать регулярное выражение для сопоставления.
  • '[0-9]+' - это регулярное выражение для поиска чисел (+ означает одно или несколько).

Следовательно, эта команда grep найдет только числовую часть выходной строки.

..

EDITED ... после второго чтения кажется, что вам нужно число, добавленное в конце "Battery Keyboard:", так что вот решение с использованием sed:

ioreg -c AppleBluetoothHIDKeyboard | sed -r 's/.*=[[:space:]]*([[:digit:]]*).*/Keyboard Battery: \1/;'

В этом случае вы заменяете исходную строку строкой, начинающейся с «Аккумулятор клавиатуры:».

Опять же, надеюсь, что это работает на Mac!

1

труба в awk ...

$ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='|awk '{print $5, $6, $7}'
"BatteryPercent" = 51

или же

$ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='|awk '{print "Keyboard Battery: ("$7")"}'
Keyboard Battery: (51)
0

Пожалуйста, прочитайте, поймите и подтвердите этот вопрос:

Выводит ли команда ioreg -c AppleBluetoothHIDKeyboard только эту строку или выводит другие строки (содержащие числа)?


Так как вам нужен вывод Keyboard Battery: 17 , который не даст ни один из опубликованных ответов, вы можете

Построить на ответ Джехад:

Если команда ioreg выводит только строку BatteryPercent , то

echo "Keyboard Battery: $(ioreg -c AppleBluetoothHIDKeyboard | grep -oE '[0-9]+')"

Но если, как я подозреваю, команда ioreg -c AppleBluetoothHIDKeyboard выводит другие строки (содержащие цифры), в дополнение к "BatteryPercent" = , то приведенная выше команда также выведет много других строк с числами.

Если, как вы неявно подтвердили, команда ioreg выводит другие строки (которые содержат числа), тогда

echo "Keyboard Battery: $(ioreg -c AppleBluetoothHIDKeyboard | grep BatteryPercent | grep -oE '[0-9]+')"

Пересмотренный ответ jehad может сработать, если команда ioreg выдает только строку BatteryPercent , хотя это может потребовать небольших изменений.

Основывайтесь на ответе Буффало Рабора:

Пересмотренный ответ Буффало Рабора сработает, при условии, что он содержит явные скобки в выходных данных.  Но это можно упростить - вам вряд ли когда-нибудь понадобится передать grep в awk:

ioreg -c AppleBluetoothHIDKeyboard | awk '/BatteryPercent/ {print "Keyboard Battery: "$7}'

PS

У меня тоже нет Mac, поэтому я не могу быть уверен, что будет работать для вас, а что нет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .