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)' *