Как я могу удалить ненужный текст из командной строки?

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

Батарея клавиатуры: (значение процента батареи)

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

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

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

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

| |   |   |   "BatteryPercent" = 17

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

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

3 ответа

Решение

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

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


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

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

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

 echo "Батарея клавиатуры: $(ioreg -c AppleBluetoothHIDKeyboard | grep -oE '[0-9]+')" 

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

Если, как вы косвенно подтвердили, ioreg команда выводит другие строки (содержащие цифры), затем

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

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

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

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

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

PS

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

Труба в 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)

Чтобы получить только номер, измените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!

Другие вопросы по тегам