Ответ 1
Любой из них будет делать:
grep -v "def" input_file | grep "abc"
или
grep "abc" input_file | grep -v "def"
Следующее также сохранит окраску, если вы хотите видеть только вывод на stdout:
grep --color=always "abc" input_file | grep -v "def"
Параметр -v
(означает "инверсное совпадение" ) сообщает grep
игнорировать строки с указанным шаблоном - в этом случае def
.