Removendo texto entre duas cadeias específicas

8

Eu tenho um arquivo como abaixo:

mime PI Name: ISHO SUCCESS RATE RT, Value: 95.663826
scr  PI Name: RRC Access Failures due to UU, Value: 0.13394141
prog PI Name: RRC Access Failures due to UU, Value: 0.16077702
sch PI Name: RRC Access Failures due to UU, Value: 0.11781933

Desejo remover o texto PI till Value: . Eu tentei

sed '/<PI>/,/<\/Value:>/d' 

Alguma ajuda?

    
por khalil saad 11.10.2013 / 14:13

2 respostas

17

Substitua tudo de PI para Value: por string vazia:

sed 's/PI.*Value://'
    
por 11.10.2013 / 14:20
6

Usar o comando d em sed excluirá a linha inteira. Além disso, não sei por que você está usando < e > . Talvez você esteja confundindo-os com \< e \> que grep usa para denotar limites de palavras? Nesse caso, você deve saber que sed usa \b para os dois tipos de limites de palavras (início e fim). Então você pode escrever algo assim:

sed -i 's/\bPI\b.*\bValue:\b//' your_file

Para uma robustez extra, eu usaria perl para quantificação lenta de . , para que você exclua apenas o texto entre a primeira ocorrência de PI e a primeira ocorrência de Value: . Claro que tudo depende do seu caso de uso.

perl -pi -e 's{ \b PI \b .*? \b Value: \b}{}x' your_file
    
por 11.10.2013 / 14:21