我正在使用 GeekTool,它获取终端命令的输出并将其转换为桌面小部件,并希望以以下形式将蓝牙键盘的当前电池百分比显示到桌面上
键盘电池:(电池百分比值)
为了实现这一点,我使用命令
ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='
来自这网站。
但是,正如该网站所提到的,此命令输出看起来不太干净的文本(是的,我需要更换电池):
| | | | "BatteryPercent" = 17
(因此,对于这个输入,我想要输出Keyboard Battery: 17
。)因此,我的问题是,如何将其转换为我想要的格式“键盘电池:(电池百分比值)“通过命令行?
编辑:我找到了另一种显示电池百分比的方法,使用 Ubersicht 而不是 GeekTool,谢谢大家的帮助
答案1
请阅读、理解并确认这个问题:
是否
ioreg -c AppleBluetoothHIDKeyboard
命令只输出那一行,还是还输出其他行(包含数字)?
因为你想要输出Keyboard Battery: 17
,到目前为止发布的答案都不会产生输出,所以你可以
建立在jehad 的回答:
如果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
如果命令仅输出行, jehad 修改后的答案可能会有效BatteryPercent
,尽管可能需要进行一些小的改动。
建立在Buffalo Rabor 的回答:
Buffalo Rabor 的修订答案可以工作,前提是它在输出中包含显式括号。但它可以简化 — 您几乎不需要通过管道grep
输入awk
:
ioreg -c AppleBluetoothHIDKeyboard | awk '/BatteryPercent/ {print "Keyboard Battery: "$7}'
附言
我也没有 Mac,所以我不确定什么对你有用,什么对你没用。
答案2
要获取数字,请将grep
示例中的“ ”更改为以下内容:
grep -oE '[0-9]+'
这应该可以工作(至少 grep 语法在 Linux 上肯定可以工作),但我没有 Mac,所以你可能需要稍微调整一下才能使其工作。
解释:
- 上面的 grep 仅提取输出的数字部分。
- “o”选项表示仅显示匹配项。
- “E”选项表示使用正则表达式进行匹配。
- '[0-9]+' 是查找数字的正则表达式(+ 表示一个或多个)。
因此,这个 grep 命令将只找到输出字符串的数字部分。
..
编辑...经过第二次阅读后,似乎您需要在“键盘电池:”末尾附加数字,因此这里有一个使用 sed 的解决方案:
ioreg -c AppleBluetoothHIDKeyboard | sed -r 's/.*=[[:space:]]*([[:digit:]]*).*/Keyboard Battery: \1/;'
在这种情况下,您将用以“键盘电池:”开头的字符串替换原始字符串。
再次希望它可以在 Mac 上运行!
答案3
管道到 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)