A opção -w
retorna correspondências que formam palavras inteiras.
O motivo pelo qual ele retorna ABHD14A-ACY1
e não RPL41
é porque ACY1
está no final da primeira e segunda linhas, enquanto RPL4
não está no início nem no final de nenhuma linha nem é seguido por um caractere constituinte não-palavra que significa algo diferente de letra, número ou sublinhado. Isso é coberto na página man
de grep
.
Para testar isso, se você adicionar 1
ao final da primeira linha para que seja 1 ABHD14A-ACY11
e remova o 1 do final da sexta linha para que seja 6 RPL4
, sua saída ficará assim :
2 ACY1
5 RPL3
6 RPL4
Não há como não retornar a primeira linha com o comando exato que você tem ou apenas chamando grep
por conta própria. Você teria que canalizá-lo para sed
para remover a primeira linha:
grep -Fwf list1.txt list2.txt | sed '/ABHD14A/d'
Ou canalize-o em awk
para imprimir apenas o que grep
retorna após a linha que contém o que você não deseja corresponder:
grep -Fwf list1.txt list2.txt | awk 'NR>1'
Ou canalize-o para grep -v para excluir a primeira linha:
grep -Fwf list1.txt list2.txt | grep -v ^1
Existem outras maneiras de fazer isso, mas essas são as mais fáceis e permitem que você canalize apenas o que você já tem.