Estou usando o GeekTool, que pega a saída dos comandos do terminal e os transforma em widgets da área de trabalho, e queria exibir a porcentagem atual da bateria do meu teclado bluetooth na área de trabalho na forma de
Bateria do teclado: (valor percentual da bateria)
Para fazer isso, estou usando o comando
ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='
que é deste site.
No entanto, como mencionado nesse site, este comando gera um texto com aparência não muito limpa (sim, preciso trocar minhas pilhas):
| | | | "BatteryPercent" = 17
(Portanto, para esta entrada, quero a saída Keyboard Battery: 17
.) Portanto, minha pergunta é: como faço para converter isso no formato pretendido de "Bateria do teclado: (valor percentual da bateria) " na linha de comando?
EDIT: Encontrei outra maneira de mostrar a porcentagem de bateria, usando o Ubersicht em vez do GeekTool, obrigado a todos pela ajuda
fonte
Keyboard Battery: 17
ouKeyboard Battery: (17)
? Ou seja, você quer parênteses literais na saída?Respostas:
Leia, entenda e reconheça esta pergunta:
Como você deseja a saída
Keyboard Battery: 17
, que nenhuma das respostas postadas até o momento produzirá, é possívelCom base na resposta de jehad :
Se oioreg
comando emitir apenas aBatteryPercent
linha, entãoMas se, como suspeito, o
ioreg -c AppleBluetoothHIDKeyboard
comando gerar outras linhas (que contêm números), além da"BatteryPercent" =
linha, o comando acima também produzirá muitas outras linhas com números.Se, como você confirmou implicitamente, o
ioreg
comando gerar outras linhas (que contêm números), entãoA resposta revisada de jehad pode funcionar se o
ioreg
comando exibir apenas aBatteryPercent
linha, embora possa exigir pequenas alterações.Desenvolva a resposta de Buffalo Rabor :
A resposta revisada de Buffalo Rabor funcionará, com a condição de incluir parênteses explícitos na saída. Mas pode ser simplificada - você quase nunca precisa tubulação
grep
emawk
:PS
Também não tenho um Mac, por isso não sei ao certo o que funcionará para você e o que não funcionará.
fonte
([[:digit:]]*)
se torne\([[:digit:]]*\)
.='|awk
, provavelmente digitou incorretamente as aspas.Para obter apenas o número, altere o "
grep
" no seu exemplo para o seguinte:Isso deve funcionar (pelo menos a sintaxe grep certamente funcionará no Linux), mas eu não tenho um Mac, então você pode precisar ajustá-lo um pouco para fazê-lo funcionar.
Explicação:
Portanto, este comando grep encontrará apenas a parte numérica da string de saída.
..
EDITADO ... após uma segunda leitura, parece que você precisa do número anexado ao final de "Bateria do Teclado:", então aqui está uma solução usando o sed:
Nesse caso, você está substituindo a sequência original por uma que comece com "Bateria do teclado:".
Mais uma vez, espero que funcione no Mac!
fonte
sed 's/.* \([0-9][0-9]*\).*/Keyboard Battery: \1/'
.[0-9]+
, ou você pode usar uma mão ainda mais curta\d+
. Na minha experiência, a[[:digit:]]
classe mais detalhada é mais amplamente suportada (como eu disse, não tem um Mac, então queria algo com maior probabilidade de funcionar). O motivo[[:digit:]]*
da minha resposta (em vez de[[:digit:]]+
) é porque eu não sei a saída possível deioreg
, então é melhor ter uma correspondência do que nenhuma correspondência (nenhuma correspondência retornaria apenas a string original).sed
não reconhece+
. Além disso, ele não reconhece\d
. Um problema com o RE * é que ele pode corresponder a uma sequência nula. Não entendo por que você prefere isso a não conseguir correspondência; se[[:digit:]]*
corresponder a uma cadeia nula,\1
será nulo e você alterará a linha de entrada (possivelmente descartando um número em outro lugar da linha). Além disso, acho quesed
trata(
e)
como caracteres não especiais e precisa\(
…\)
capturar uma substring (→\1
). ... (continua):
na cadeia de substituição duas vezes . Além disso, o;
é desnecessário.tubo para awk ...
ou
fonte