如何从命令行输出中删除不必要的文本?

如何从命令行输出中删除不必要的文本?

我正在使用 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)

相关内容