Apagar linhas com uma palavra usando sed

0

Eu tentei usar sed '/\bpassword\b/d' e sed "/\<password\>/d" para encontrar apenas linhas que contenham "senha" e excluí-las, mas isso não funciona. O comando também encontra palavras como "senha". ou "senha @".

Digamos que eu tenha estas palavras:

password
password1
password2
password!
password@
password%
password*

Eu só tenho que excluir a linha com "senha" e não os outros. Atualmente, esses dois comandos excluem a "senha @", "senha%", "senha!" e "password *" também.

    
por Aintsmartenough 09.11.2017 / 12:17

2 respostas

5

Se aparecerem em uma linha por palavra, use o ^ e $ para corresponder ao início da linha e ao fim da linha. Considere o seguinte arquivo de amostra foo :

$ cat foo
password
password!1
password2
2password

O uso de início e final de linha correspondentes ao sed substitui apenas a linha que consiste apenas em password

$ sed '/^password$/d' foo
password!1
password2
2password
    
por vidarlo 09.11.2017 / 12:41
2

Atualmente não está claro se as linhas que você deseja excluir podem conter qualquer coisa, exceto a string password . Suponho que eles façam isso porque a resposta de vidarlo já cobre o contrário.

A expressão regular (estendida)

(^|\s)password(\s|$)

corresponde a todas as strings que começam no início de linha ou com espaços em branco, seguidas pelo infix password , seguido por espaço em branco ou fim de linha.

O respectivo comando sed é:

sed -re '/(^|\s)password(\s|$)/d'

Como alternativa, você pode usar grep no modo inverso:

grep -vEe '(^|\s)password(\s|$)'
    
por David Foerster 09.11.2017 / 17:01