Sed solo esprimere l'espressione corrispondente

Come fare sed solo printingre l'espressione abbinata?

Vorrei riscrivere stringhe come "Batteria 0: Carica, 44%, carica" ​​a "Batteria: 44%". Ho provato quanto segue:

sed -n '/\([0-9]*%\)/c Battery: \1'

Questo non funziona.

La "soluzione" comune è quella di utilizzare la ricerca e la sostituzione dell'intera linea: sed -n 's/.*\([0-9]*%\).*/Battery: \1/p' . * sono troppo avidi e il \ 1 è solo il%.

Inoltre non voglio abbinare più di quanto mi serve.

  • Rendere il regexp un po 'più specifico.

     sed -n 's/.* \([0-9]*%\),.*/Battery: \1/p' 
  • Scegliere un altro strumento.

     perl -ne '/(\d+%)/ && print "Battery: $1\n";' 

    (solo per il record, foo && bar è abbreviato per if (foo) { bar } .)

Forse potresti grep -o (il -o è importnte) per i valori richiesti invece e utilizzare quelli nello script (?) In questo modo potresti utilizzare il valore in modi più creativi o forse solo avvolto in echo ecc.