Как я могу удалить ненужный текст из командной строки?
Я использую 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!