pt sed remove ze se ze estiver sozinho na linha [duplicate]

1

Ubuntu, sed remove ze se ze estiver sozinho na linha

O mais próximo que obtive é sed "s/\bze\b//g" e sed "s/^\bze\b//g" , o que não produz o resultado desejado.

Antes de sed:

ze.com
example.ze
zero.com
ze

Após sed:

ze.com
example.ze
zero.com
    
por Bjorn 04.08.2018 / 02:45

2 respostas

5

Você precisa de âncoras de linha em vez de limites de palavras

$ sed '/^ze$/d' file
ze.com
example.ze
zero.com
    
por 04.08.2018 / 02:50
4

Usando grep :

$ grep -vxF ze file
ze.com
example.ze
zero.com

As opções usadas:

  • -v nega o sentido da correspondência, de forma que apenas as linhas não que correspondem ao padrão são retornadas.

  • -x exige que o padrão corresponda a uma linha completa do início ao fim.

  • -F diz a grep que o padrão é uma sequência fixa e não uma expressão regular.

O problema com as expressões sed é que uma substituição modifica uma linha na entrada, mas nunca apaga uma linha. O padrão \bze\b corresponderá corretamente à palavra completa ze , mas essa palavra também existe em outras linhas, não apenas na última linha.

Para excluir uma linha com sed , use seu comando d junto com uma expressão regular que corresponda à linha que você deseja remover, como ^ze$ , como steeldriver mostra em sua resposta .

Para o exemplo específico (remover a última linha),

sed '$d' file

também seria uma opção. Aqui, $ não é uma expressão regular (desde que não esteja dentro de /.../ ), mas o endereço especial da última linha no arquivo.

    
por 04.08.2018 / 09:18

Tags