Exclui linhas de um arquivo de texto que corresponde a várias expressões regulares em um arquivo de texto

5

Digamos que eu tenha FileA.txt que se parece com isso:

43287134, string1, string2
1233, foo, bar
973, barfoo, foobar
7464, asdf, ghjk

E eu tenho FileB.txt com essas expressões regulares, separadas por uma linha:

^973,
^1233,

Eu gostaria de aplicar regexes FileB.txt em FileA.txt e excluir as linhas correspondentes para que o resultado final seja:

43287134, string1, string2
7464, asdf, ghjk

Existe alguma ferramenta disponível para fazer isso? Obrigado!

    
por graber 07.01.2018 / 00:44

2 respostas

10

É exatamente para isso que o grep foi projetado:

grep -v -f FileB.txt FileA.txt
  • -f <filename> lê regexes do arquivo (em vez da linha de comando)
  • -v inverte a correspondência (imprime linhas não correspondentes)

Saída:

43287134, string1, string2
7464, asdf, ghjk
    
por 07.01.2018 / 00:49
1

Isso também pode ser feito com sed :

while read -r REG_EX; do sed -i "/$REG_EX/d" FileA.txt; done<FileB.txt
    
por 07.01.2018 / 00:53