pt sed para excluir linhas usando várias sequências de pesquisa

4

Eu tenho um arquivo de texto, digamos test1.txt , preciso remover a linha que contém o cachorro e datar com "29-APR-2015"

Usando o comando abaixo para realizá-lo, mas não está excluindo as linhas.

Onde, como se eu menciono apenas com /DOG/d , está excluindo as linhas que contêm DOG .

arquivo de comando (sedcommands)

/DOG,29-APR-2015/d

test1.txt

DOG          29-APR-2015          
DOG          29-APR-2015          
DOG          30-APR-2015          
CAT          29-APR-2015          
CAT          29-APR-2015          

comando

sed -f sedcommands test1.txt > test2.txt
    
por Gopal 29.04.2015 / 04:33

4 respostas

4

Com o GNU sed:

sed '/DOG/{/29-APR-2015/d}' test1

Este método permite qualquer pedido. ie. DOG pode ser antes ou depois da data.

    
por 29.04.2015 / 05:17
3

POSIXly:

sed -e '/DOG/!b' -e '/29-APR-2015/!b' -e d file

b ranch até o final se você não fornecer nenhum rótulo.

ou:

sed '/DOG/{/29-APR-2015/d
}' file

Modern sed implementations também suporta {command;} form, esta é uma extensão aceita pelo POSIX, mas não é necessária:

sed '/DOG/{/29-APR-2015/d;}' file
    
por 29.04.2015 / 06:46
2

/DOG,29-APR-2015/d não funcionará porque não há vírgula entre DOG e 9-APR-2015 . Tente isto:

$ sed -e '/DOG[[:space:]]*29-APR-2015/d' test1.txt 
     DOG          30-APR-2015          
     CAT          29-APR-2015          
     CAT          29-APR-2015   

[[:space:]]* permite zero ou mais caracteres de espaço em branco entre DOG e 9-APR-2015 . A classe de caractere [:space:] permite espaços e guias comuns e é segura para uso com fontes unicode.

    
por 29.04.2015 / 04:41
1

O arquivo de comando deve conter:

/DOG *29-APR-2015/d

Ou seja, DOG seguido por 0 ou mais espaços, seguidos da data especificada.

    
por 29.04.2015 / 04:40

Tags