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.