Ваш скрипт основан на именах файлов без пробелов и переносов.
Ваш скрипт работает неправильно в result=$(grep -v "word2" $list| grep -rHn "word1" $list)
. Второй grep
не будет смотреть на результаты первого grep
, так как он имеет $list
в качестве аргумента.
Вы хотели
result=$(grep -rHn "word1" $(grep -lv "word2" $list))
Это по-прежнему не работает, второй grep
вернет все файлы, по крайней мере, с одной строкой, отличной от "word2".
Сначала вам нужно найти все файлы, которые нужно исключить, это файлы с «word2». Эти файлы нужно исключить из списка $ {(я использую фигурные скобки, к этому привыкаю).
grep -vf <(grep -l "word2" ${list}) <(echo ${list} | tr " " "\n" )
В результате
result=$(grep -Hn "word1"
$(grep -vf <(grep -l "word2" ${list}) <(echo ${list} | tr " " "\n" )))
Другим способом было бы добавить дополнительные аргументы к вашей команде find
(не найти слово2, но найти слово1)
find "." -type f -name "${file}" ! -exec grep -q "word2" {} \; \
-exec grep -Hn "word1" {} \; 2>/dev/null