2 votes

Comment supprimer le texte inutile d'une sortie de ligne de commande ?

J'utilise GeekTool, qui prend la sortie des commandes de terminal et les transforme en widgets de bureau, et je voulais afficher le pourcentage actuel de la batterie de mon clavier Bluetooth sur le bureau sous la forme suivante

Keyboard Battery: _(Battery percent value)_

Pour ce faire, j'utilise la commande

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

qui provient de este site web.

Cependant, comme mentionné sur ce site, cette commande produit ce texte pas très propre (oui, je dois changer mes piles) :

| |   |   |   "BatteryPercent" = 17

(Donc, pour cette entrée, je veux que la sortie Keyboard Battery: 17 .) Par conséquent, ma question est la suivante : comment puis-je convertir ces données dans le format que je souhaite utiliser, à savoir "Keyboard Battery" ? (Valeur de la batterie en pourcentage) "via la ligne de commande ?

EDIT : J'ai trouvé un autre moyen d'afficher le pourcentage de la batterie, en utilisant Ubersicht au lieu de GeekTool, merci à tous pour votre aide.

1voto

Simon Woker Points 3238

Pour obtenir uniquement le numéro, changez le " grep "dans votre exemple à ce qui suit :

grep -oE '[0-9]+'

Cela devrait fonctionner (au moins la syntaxe grep fonctionnera certainement sous Linux), mais je n'ai pas de Mac, donc vous devrez peut-être la modifier un peu pour qu'elle fonctionne.

Explication :

  • Le grep ci-dessus extrait seulement la partie numérique de la sortie.
  • L'option 'o' permet de montrer UNIQUEMENT le match.
  • L'option 'E' indique l'utilisation d'une expression régulière pour la correspondance.
  • '[0-9]+' est l'expression régulière permettant de trouver des chiffres (+ signifie un ou plusieurs).

Par conséquent, cette commande grep ne trouvera que la partie numérique de la chaîne de sortie.

..

EDITION... après une seconde lecture, il semble que vous ayez besoin d'ajouter le numéro à la fin de "Keyboard Battery :", voici donc une solution utilisant sed :

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

Dans ce cas, vous remplacez la chaîne originale par une chaîne qui commence par "Keyboard Battery : ".

Encore une fois, j'espère que cela fonctionne sur Mac !

1voto

Buffalo Rabor Points 21

Pipe à 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)

0voto

Veuillez lire, comprendre et reconnaître cette question :

Est-ce que le ioreg-cAppleBluetoothHIDKeyboard commande n'affiche que cette seule ligne, ou produit-elle également d'autres lignes (qui contiennent des chiffres) ?


Puisque vous voulez que la sortie KeyboardBattery:17 , qu'aucune des réponses postées jusqu'à présent ne produira, vous pouvez

Construire sur réponse de jehad :

Si le ioreg ne produit que le BatteryPercent ligne, puis

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

Mais si, comme je le soupçonne, le ioreg-cAppleBluetoothHIDKeyboard commande produit d'autres lignes (qui contiennent des chiffres), en plus de la ligne "BatteryPercent"= ligne, alors la commande ci-dessus auch sortie de nombreuses autres lignes avec des chiffres.

Si, comme vous l'avez implicitement confirmé, le site ioreg produit d'autres lignes (qui contiennent des chiffres), alors la commande

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

la réponse révisée de jehad pourrait fonctionner si le ioreg ne produit que le BatteryPercent ligne, bien que cela puisse nécessiter de petits changements.

Construire sur La réponse de Buffalo Rabor :

La réponse révisée de Buffalo Rabor fonctionnera, à condition d'inclure des parenthèses explicites dans la sortie. Mais elle peut être simplifiée - vous n'avez presque jamais besoin de pipeter grep en awk :

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

P.S.

Je n'ai pas de Mac non plus, donc je ne peux pas être sûr de ce qui fonctionnera pour vous et de ce qui ne fonctionnera pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X