usando sed para percorrer registros em um arquivo e usar grep em todos os registros

0

Estou tentando encontrar strings de um arquivo em outro arquivo e preciso que a cadeia de caracteres de pesquisa seja impressa uma vez e as linhas de correspondências a seguir.

As strings para as quais quero encontrar correspondências estão em um arquivo com 2 linhas por registro, sem linhas vazias etc. A linha 1 contém o nome, a linha 2 a cadeia que preciso encontrar no segundo arquivo. sed -n '1~2p' imprimirá todos os nomes, mas eu precisarei imprimir apenas o primeiro nome, passar o valor da segunda linha para grep, executar o comando grep, depois imprimir o nome do segundo registro (linha 3), passar a linha 4 para grep e assim por diante. Uma alternativa seria usar um loop while ou until com um contador incrementado por 2, mas não sei como passar o valor do contador para sed .

    
por Susanne 06.11.2017 / 23:06

1 resposta

2

Se eu entendi corretamente, então é dado

$ head File\ {1..3}
==> File 1 <==
foo
Pattern 1
bar

==> File 2 <==
foo
bar
baz

==> File 3 <==
Pattern 3
foo
baz

e

$ cat infile
File 1
Pattern 1
File 2
Pattern 2
File 3
Pattern 3

então

$ sed -E '$!N; s/(.*)\n(.*)/grep -H -- "" ""/e' infile
File 1:Pattern 1

File 3:Pattern 3

ou

$ while read -r file; do 
    if read -r pattern; then grep -H -- "$pattern" "$file"; fi
  done < infile 
File 1:Pattern 1
File 3:Pattern 3
    
por steeldriver 06.11.2017 / 23:51