Se a sua versão do grep for compatível com o modo PCRE ( -P ), você poderá tentar uma correspondência multilinha que encontre instâncias de @<TRIPOS>BOND seguidas (após apenas uma nova linha) por @<TRIPOS>SUBSTRUCTURE , por exemplo.
grep -lzP '\Q@<TRIPOS>BOND\E\n\Q@<TRIPOS>SUBSTRUCTURE\E' *
O \Q e \E podem ser desnecessários neste caso, mas destinam-se a forçar correspondência literal (no caso de @ , > , < ter um significado especial na sintaxe regex Perl). O -l diz ao grep para listar os arquivos correspondentes em vez de imprimir a correspondência. Você pode usar a lista de arquivos como uma entrada para o comando mv , por exemplo,
grep -lzP '\Q@<TRIPOS>BOND\E\n\Q@<TRIPOS>SUBSTRUCTURE\E' * | xargs mv -t /path/to/newdir/
Informações adicionais
Você pode expressar a segunda parte da partida como lookahead , mas não acho que tenha vantagem nesse caso
grep -lzP '\Q@<TRIPOS>BOND\E\n(?=\Q@<TRIPOS>SUBSTRUCTURE\E)' *
Expressões equivalentes em pcregrep (que não fazem parte do sistema padrão do Ubuntu, mas podem ser obtidas do repositório) seriam algo como
pcregrep -lM '\Q@<TRIPOS>BOND\E\n\Q@<TRIPOS>SUBSTRUCTURE\E' *
e
pcregrep -lM '\Q@<TRIPOS>BOND\E\n(?=\Q@<TRIPOS>SUBSTRUCTURE\E)' *