Removendo texto entre duas seqüências específicas


10

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

Quero remover o texto PIaté Value:. eu tentei

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

Qualquer ajuda?

Respostas:


20

Substitua tudo de PIpara Value:por uma string vazia:

sed 's/PI.*Value://'

10
Isso funcionará se PIe Value:ocorrer em linhas diferentes?
Brian Fitzpatrick

6

Usar o dcomando in sedexcluirá toda a linha. Além disso, não sei por que você está usando <e >. Talvez você esteja confundindo-os com isso \<e para indicar limites de palavras? Nesse caso, você deve saber que é usado para ambos os tipos de limites de palavras (início e fim). Então você pode escrever algo como isto:\>grepsed\b

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

Para maior robustez, eu usaria perlpara quantificação lenta de, .para que você exclua apenas o texto entre a primeira ocorrência de PIe 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

1

Use este código abaixo para remover várias linhas entre padrões (incluindo linhas com padrões):

sed "/PI/,/Value:/d" your_file

Se você deseja modificar seu_arquivo diretamente:

sed -i "/PI/,/Value:/d" your_file

Observe a distinção aqui - isso exclui linhas em um intervalo, enquanto a pergunta está solicitando a exclusão de texto entre duas strings.
Jeff Schaller
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.