Sed apenas imprimir expressão correspondida

3

Como fazer o sed apenas imprimir a expressão correspondente?

Eu quero reescrever strings como "Bateria 0: Carregando, 44%, carregando" para "Bateria: 44%". Eu tentei o seguinte:

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

Isso não funciona.

A "solução" comum é usar a pesquisa e substituir e corresponder a linha inteira: %código% Agora os. * São muito gananciosos e o \ 1 é apenas o%.

Além disso, não quero corresponder mais do que preciso.

    
por user75250 06.04.2011 / 17:22

2 respostas

7
  • Torne o regexp um pouco mais específico.

    sed -n 's/.* \([0-9]*%\),.*/Battery: /p'
    
  • Escolha uma ferramenta diferente.

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

    (apenas para o registro, foo && bar é a abreviação de if (foo) { bar } .)

por 06.04.2011 / 18:06
2

Talvez você possa grep -o (o -o é importante) para os valores necessários e usá-los em seu script (?) Dessa forma, você poderia usar o valor de maneiras mais criativas ou talvez envolto em echo ' s etc.

    
por 06.04.2011 / 17:27

Tags