pt + delete linhas que contenham string, exceto linhas com

1

Este comando sed exclui linhas que contenham a palavra 'rocommunity':

sed -i '/rocommunity/d' snmpd.conf

rocommunity hedona 127.0.0.1
rocommunity hedona linux1 
rocommunity hedona linux12
rocommunity hedona linux13
rocommunity hedona linux15
rocommunity hedona linux16
rocommunity hedona linux17
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona

Como atualizar meu sed para excluir linhas que contenham rocommunity, exceto a linha com 127.0.0.1

resultado esperado:

rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona
    
por yael 23.01.2017 / 17:58

3 respostas

4

Basta combinar duas pesquisas:

sed  '/rocommunity.*127\.0\.0\.1/p;/rocommunity/d' /path/to/input

/rocommunity.*127\.0\.0\.1/p - Em uma linha com uma correspondência para rocommunity seguida por uma correspondência para 127.0.0.1 , imprima a linha

/rocommunity/d - Em uma linha com correspondência para rocommunity , não imprima

Tudo o mais será impresso.

Para alterar o arquivo depois de confirmar o que você quer é o que está sendo feito, você pode usar sed --in-place para fazer as alterações no arquivo.

    
por 23.01.2017 / 18:07
2
$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in >data.out

O comando sed primeiro desativa a impressão padrão de todas as linhas ( -n ) e usa dois comandos de edição ( -e ). O primeiro imprimirá qualquer linha que contenha a palavra rocommunity seguida por 127.0.0.1 mais tarde na linha. O segundo comando de edição irá imprimir todas as linhas que não contenham rocommunity .

Com os dados no início da sua pergunta:

$ sed -n -e '/rocommunity.*127.0.0.1/p' -e '/rocommunity/!p' data.in
rocommunity hedona 127.0.0.1
syscontact linux 67
syslocation UNKNOWN
trapcommunity hedona
trapsink  linux76 parshedona
    
por 23.01.2017 / 18:09
1

se combinado "rocommunity" e "127.0.0.1", então ramifique para finalizar. e irá imprimir a linha.

sed -e '/rocommunity{/127\.0\.0\.1/b' -e 'd;}' file

Qual, com a implementação GNU de sed , você pode reduzir para:

sed '/rocommunity/{/127\.0\.0\.1/b;d}' file
    
por 29.01.2017 / 08:35

Tags