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