Как насчет
for file in *.txt; do
grep -A1 "@<TRIPOS>BOND" "$file" | grep -q SUBSTR && mv "$file" bad_files/
done
Это будет проходить через все .txt файлы в текущем каталоге (изменение на blob до любых совпадений с вашими файлами) и сохранение каждый как $file. Затем он выполнит поиск $file для @<TRIPOS>BOND и распечатает его и следующую строку. Это передается через следующий grep, который молча (-q) ищет SUBSTR, если он находит его, это означает, что строка после BOND равна SUBSTRUCTURE, а не цифра, которую вы хотите, чтобы она переместите текущий файл в папку bad_files.