grep funciona em linhas, então "você não pode fazer isso" ; mas, quando eu preciso fazer algo assim em bash , e eu não quero / não posso usar perl ou similar (ou, honestamente , Eu só quero usar grep ) Eu faço algo assim:
tr '\n' '\a' < <filename> | grep --only-matching Hello$'\a'I$'\a'am$'\a'here\ right\ now | tr '\a' '\n'
tr traduz caracteres; aqui, você está 'traduzindo' novas linhas para bell ascii char [código hexadecimal \ x07 ou '\ a'] , então processe em grep (note que grep vê uma longa cadeia de uma linha, com caracteres de bell ascii em vez de nova linha chars), e então, de volta para 'normal', traduzindo bell ascii chars para nova linha .
não há necessidade de usar bell ascii char : você pode usar qualquer caractere que não apareça no seu arquivo; no meu caso, é só que eu gosto do número sete e, geralmente, um arquivo de texto não contém nenhum caracter bell ascii chars
BTW: o $'\a' é Bash ANSI-C Citando