Supondo que você queira imprimir apenas duas linhas para cada correspondência, com GNU ou FreeBSD grep, você pode passar A.txt
como uma lista de padrões para grep
e dizer para imprimir a linha após a partida. Isso produz linhas extras com apenas --
entre cada partida, você pode facilmente removê-las com uma chamada extra para o grep.
grep -A1 -Ff A.txt B.txt | grep -vx -- '--'
Se o número de linhas por seção não for fixo, você pode usar o awk. Primeiro leia o arquivo que contém o texto a ser procurado e, em seguida, para cada linha em B.txt
que inicia uma nova seção, inicie ou pare a impressão, dependendo de o cabeçalho da seção estar em A.txt
ou não.
awk -v patterns_file=A.txt '
BEGIN {
while (getline <patterns_file) patterns_array[$0] = 1;
close(patterns_file);
}
/^/ { matching = $0 in patterns_array }
matching { print }
' B.txt