Apagar linha se dois padrões forem encontrados na mesma linha

2

Gostaria de excluir uma linha de um arquivo de texto ( input.txt ) se dois padrões ( string1 e string2 ) forem encontrados na linha same , usando sed .

Estou tentando: sed -i "/\b\(string1\|string2\)\b/d" input.txt , mas isso está excluindo linhas que contêm string1 OR string2 .

    
por dovah 08.11.2015 / 12:41

2 respostas

5
sed -i "/string1.*string2\|string2.*string1/d" input.txt

Isso excluirá qualquer linha onde string1 apareça antes de string2, OU string2 apareça antes de string1. Ambas as strings precisam estar na linha, em qualquer ordem, para que a linha seja excluída.

    
por 08.11.2015 / 13:01
3
sed -ie '/string1/!b' -e '/string2/d' file.txt

Isso exclui as linhas que contêm string1 e string2 , independentemente do pedido (pode até se sobrepor ao procurar por foobar in barbaz em uma linha contendo foobarbaz ).

-i acima é uma extensão do GNU. Outra solução específica do GNU:

awk -i inplace '!(/string1/ && /string2/)' file.txt

Portavelmente, você provavelmente usaria perl aqui:

perl -ni -e 'print unless /string1/ && /string2/'
    
por 08.11.2015 / 18:37