Você pode fazer isso usando a opção grep
de -f
(que é minúscula -f
, não -F
):
% echo -e 'Dog\nFish\nCat\nShoes' > ./file1.txt
% echo -e '1,shoes,red\n2,apple,black\n3,fog,blue' > ./file2.csv
# Grab all lines from the CSV that match a pattern from file1:
% grep -if ./file1.txt ./file2.csv
1,shoes,red
# Grab all lines from the CSV that DON'T match a pattern from file1:
% grep -vif ./file1.txt ./file2.csv
2,apple,black
3,fog,blue
Explicação detalhada:
-
grep
- auto-explicativo -
-v
- significa 'linhas de retorno que não correspondem ao padrão de entrada' -
-i
- significa 'usar correspondência sem distinção entre maiúsculas e minúsculas' (já que seu primeiro arquivo tinha letras maiúsculas e o CSV não tinha) -
-f
- significa interpretar cada linha no arquivo especificado (file1.txt
) como um padrão a ser usado para correspondência '
Dependendo dos resultados desejados e do conteúdo de seus arquivos, você também pode ler as opções -F
e -w
.
Se você precisar editar o arquivo no local, acho que pode fazer isso com a opção sed
-f
, mas sed
interpreta cada linha do arquivo como um comando, em vez de um padrão simples como grep
faz.