Ваш подход, даже если вы получите право на экранирование, столкнется с проблемами, когда число файлов, выводимых goodword
grep
, достигнет пределов длины командной строки.Лучше перенаправить вывод первого grep
на второй grep
, например,
grep -lr -- goodword * | xargs grep -Li -- badword
Это будет правильно обрабатывать файлы с пробелами в них, но произойдет сбой, если имя файла имеетновая строка в нем.По крайней мере, GNU grep
и xargs
поддерживают разделение имен файлов байтами NUL, например:
grep -lrZ -- goodword * | xargs -0 grep -Li -- badword
EDIT: добавлены двойные тире --
к grep
, чтобы избежать случая, когда какой-либо файлимена начинаются с -
и будут интерпретироваться grep
как дополнительные параметры.