grep é bastante estúpido quando se trata de padrões multilinhas, mas traduzir todos os caracteres newline \n do padrão e do texto para pesquisar em caracteres NUL antes de compará-los corrige isso. Também é necessário traduzir \nfile1 na saída para file2 .
Este é o seu comando, supondo que <(tr '\n' ' contenha o padrão que você deseja pesquisar em file1' < file1)<(tr '\n' ' : file2' < file2)
grep -aof <(tr '\n' 'A B
C D
E F
G H
' < file1) <(tr '\n' 'grep -aof <(tr '\n' 'A B
C D
E F
G H
' < file1) <(tr '\n' '%pre%' < file2) | tr '%pre%' '\n'
' < file2) | tr '%pre%' '\n'
Exemplo de saída para seus arquivos:
%pre%Explicação:
-
grep -f PATTERN_FILE INPUT_FILEcria um objeto FIFO / pipe nomeado / semelhante a um arquivo temporário que é igual aPATTERN_FILE, mas com todos os caracteres de nova linha traduzidos para caracteres NUL. -
INPUT_FILEfaz o mesmo, mas para-a. -
grepprocura o (s) padrão (s) deem-ogrep. - O
| tr '%code%' '\n'sinalizador de %code% ativa a correspondência em arquivos binários. Isso é necessário porque, do contrário, ele ignora arquivos que contêm caracteres não imprimíveis, como %code% . - O sinal %code% de %code% faz com que seja impressa apenas a sequência correspondente, não toda a linha em que foi encontrada.
- %code% traduz todos os caracteres NUL da saída do comando no lado esquerdo de volta para os caracteres de nova linha.