"Sed" comando para excluir uma linha com a string exata correspondente, sem caracteres especiais a serem incluídos

1

Estou tentando excluir uma linha do arquivo abaixo

localhost
localhost23
localhost-2.com
localhost-loopback.com
localhost.utopiad.com
localhostr.com

usando sed '/^localhost\b/d' file

Não entendo por que apenas as duas linhas localhostr.com e localhost23 são impressas. Eu quero apenas que a linha localhost seja excluída ...

    
por ArjunCh 25.06.2018 / 15:10

1 resposta

2

\b corresponde a um limite de palavra no sed GNU, ou seja, o ponto entre um "caractere de palavra" e um caractere de não palavra. Letras, dígitos e sublinhados são os primeiros, pontos e traços (entre outros) o último, portanto há um limite de palavra no final de localhost no final da linha, bem antes dos pontos e traços. Mas não entre t e 2 ou t e r .

Se você quiser remover a linha com a palavra localhost apenas, use sed -e '/^localhost$/d' ou mesmo grep -vFx 'localhost' ( -v para correspondência invertida, -F para correspondência de sequência fixa, -x para correspondência completa correspondência de linha).

Ou, se você tiver espaços em branco à direita: sed -e '/^localhost[[:blank:]]*$/d'

    
por 25.06.2018 / 15:16