Como deletar uma linha se string for a única coisa na linha

1

Como posso usar o sed ou alguma outra coisa para excluir uma linha apenas se a string que estou procurando for a única coisa na linha?

Exemplo de saída:

    device-address-binding: ?
    database-revision: 20
  -- Found 198 Objects 
  }, 
  { 
    object-identifier: (Analog Input, 1)
    object-type: ({  Analog Input  },)
    object-name: "CA-1 T EXT"
    descrip

Preciso excluir as linhas que contêm "}", mas apenas as linhas que não contêm mais nada. Se eu usar sed para combinar e excluir uma linha contendo "}", na saída acima da linha "tipo de objeto" também será excluída.

Seria bom procurar por "}, / n", mas todos sabemos que o sed não funciona dessa maneira.

Obrigado pela sua ajuda.

    
por TCZ8 06.05.2014 / 17:31

4 respostas

2

sed usa $ para o fim da linha:

sed '/^},$/ d'

^ significa o início da linha. Você também pode precisar tolerar alguns espaços em branco em torno de }, .

sed '/^[[:space:]]*},[[:space:]]*$/ d'
    
por 06.05.2014 / 17:39
3

Não há necessidade de sed :

grep -vx }, file

Ou para permitir espaços em branco:

grep -vx '[[:blank:]]*},[[:blank:]]*' file
    
por 06.05.2014 / 21:50
1
sed '/^[[:blank:]]*},[[:blank:]]*$/d' file
    
por 06.05.2014 / 17:38
1

Você pode fazer isso de várias formas, aqui está uma perl solution:

$ perl -ple 's#^\s*},\s*##' file
    device-address-binding: ?
    database-revision: 20
  -- Found 198 Objects 

  { 
    object-identifier: (Analog Input, 1)
    object-type: ({  Analog Input  },)
    object-name: "CA-1 T EXT"
    descrip
    
por 06.05.2014 / 17:38