Comment faire en sorte que sed n'imprime que l'expression correspondante?
Je souhaite réécrire des chaînes telles que "Batterie 0: charge, 44%, charge" dans "Batterie: 44%". J'ai essayé ce qui suit:
sed -n '/\([0-9]*%\)/c Battery: \1'
Ça ne marche pas.
La "solution" courante consiste à utiliser les fonctions de recherche, de remplacement et de correspondance de la ligne entière: sed -n 's/.*\([0-9]*%\).*/Battery: \1/p'
Maintenant, les. * Sont trop gourmands et le \ 1 n'est que le%.
De plus, je ne veux pas faire correspondre plus que nécessaire.
[[ $val =~ regex ]]
, de même que$BASH_REMATCH
. En outre, étant donné l'état de la batterie, envisagez d'augmenter l'intervalle à 5 ou 7 secondes. (Au fait, Linux peut-il mettre en cache le binaire Perl en mémoire après le premier exec?)Peut-être que vous pourriez
grep -o
(le -o est important) pour les valeurs requises à la place et utilisez celles de votre script (?). Ainsi, vous pouvez utiliser la valeur de manière plus créative ou peut-être simplement encapsuléeecho
etc.la source