Você pode usar uma construção while
para fazer um loop pelos padrões de file2
e usar -m 1
com grep
para parar após a primeira correspondência em file1
:
while IFS= read -r i; do grep -Fm1 "$i" file1; done <file2
-
-F
trata o padrão literalmente -
-m 1
fazgrep
sair depois da primeira correspondência
Os loops de shell geralmente não são eficientes, mas, considerando que a lista de padrões é pequena, é possível utilizá-lo.
Alternativa mais rápida , xargs
:
xargs -a file2 -n1 -P2 -I'{}' grep -Fm1 {} file1
Use mais processos paralelos ( -P
) para mais padrões.
Exemplo:
% while IFS= read -r i; do grep -Fm1 "$i" file1; done <file2
my colour is red
my colour is blue
% xargs -a file2 -n1 -P2 -I'{}' grep -Fm1 {} file1
my colour is blue
my colour is red