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.
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
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
/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.
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.
Tags sed