Como posso remover texto desnecessário de uma saída de linha de comando?

2

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

Keyboard Battery: (Battery percent value)

Para conseguir isso, estou usando o comando

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

que é de este site .

No entanto, como mencionado nesse site, este comando gera este texto não muito limpo (sim, eu preciso trocar minhas baterias):

| |   |   |   "BatteryPercent" = 17

(Então, para esta entrada, eu quero a saída Keyboard Battery: 17 .) Portanto, minha pergunta é: como converter isso em meu formato pretendido de "Bateria do teclado: (valor percentual da bateria) " por meio da linha de comando?

EDIT: Eu encontrei uma outra maneira de mostrar o percentual de bateria, usando Ubersicht em vez de GeekTool, obrigado a todos pela vossa ajuda

    
por D4rKP01s0n 01.07.2016 / 20:34

3 respostas

0

Por favor, leia, compreenda e reconheça esta pergunta:

Does the ioreg -c AppleBluetoothHIDKeyboard command output only that one line, or does it also output other lines (that contain numbers)?

Como você deseja a saída Keyboard Battery: 17 , que nenhuma das respostas postadas até agora vai produzir, você pode

Construa na resposta de jehad :

Se o comando ioreg gerar apenas a linha BatteryPercent ,

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

Mas se, como suspeito, o comando ioreg -c AppleBluetoothHIDKeyboard gera outras linhas (que contêm números), além da linha "BatteryPercent" = , então o comando acima irá também produzir muitas outras linhas com números.

Se, como você implicitamente confirmou, o comando ioreg gera outras linhas (que contêm números) e, em seguida,

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

resposta revisada de jehad pode funcionar se o comando ioreg gerar apenas a linha BatteryPercent , embora possa exigir pequenas alterações.

Construa em 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 isso pode ser simplificado - você quase nunca precisa canalizar grep para awk :

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

P.S.

Eu também não tenho Mac então eu não posso ter certeza do que vai funcionar para você e o que não vai.

    
por 01.07.2016 / 22:23
1

Para obter apenas o número, altere o " grep " no seu exemplo para o seguinte:

grep -oE '[0-9]+'

Isso deve funcionar (pelo menos a sintaxe do grep certamente funcionará no Linux), mas eu não tenho um Mac, então você pode precisar ajustar um pouco para fazê-lo funcionar.

Explicação:

  • O grep acima está extraindo apenas a parte numérica da saída.
  • a opção 'o' diz só para mostrar o jogo.
  • A opção 'E' diz usar expressão regular para correspondência.
  • '[0-9] +' é a expressão regular para encontrar números (+ significa um ou mais).

Portanto, este comando grep encontrará apenas a parte numérica da string de saída.

..

EDITADO ... depois de 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:

ioreg -c AppleBluetoothHIDKeyboard | sed -r 's/.*=[[:space:]]*([[:digit:]]*).*/Keyboard Battery: /;'

Nesse caso, você está substituindo a string original por uma que começa com "Bateria do teclado:".

Novamente, espero que funcione no Mac!

    
por 01.07.2016 / 21:24
1

pipe para o awk ...

$ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='|awk '{print $5, $6, $7}'
"BatteryPercent" = 51

ou

$ioreg -c AppleBluetoothHIDKeyboard |grep '"BatteryPercent" ='|awk '{print "Keyboard Battery: ("$7")"}'
Keyboard Battery: (51)
    
por 01.07.2016 / 21:27