Вы можете сделать это с помощью опции grep
-f
(это -f
, а не -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
Детальное объяснение:
grep
- говорит сам за себя
-v
- означает «возврат строк, не соответствующих шаблону ввода»
-i
- означает «использовать сопоставление без учета регистра» (поскольку ваш первый файл имел заглавные буквы, а CSV - нет)
-f
- означает «интерпретировать каждую строку в указанном файле (file1.txt
) как шаблон для сопоставления»
В зависимости от желаемых результатов и содержимого ваших файлов, вы можете также прочитать опции -F
и -w
.
Если вам нужно отредактировать файл на месте, я думаю , что вы можете сделать это с sed
«s опции -f
но sed
интерпретирует каждую строку файла в качестве команды , а не простой схеме , как grep
делает.