Uma maneira de fazer isso é reverter um pouco a idéia de qual é a entrada e usar a.txt
como os padrões para procurar e o que você está chamando de "entrada" (eu chamarei de "arquivo2") para ser o que é pesquisado em :
grep -o -f a.txt file2
ou
echo "/abc/dog" | grep -o -f a.txt
Estes não produzirão nada para "/ dog", embora a versão echo
tenha um código de retorno diferente de zero.
Editar:
Isso corresponderá mais de perto à saída solicitada:
while read -r line
do
match=$(echo "$line" | grep -of a.txt)
match=${match:-(NONE)}
printf "%-12s => %s\n" "$line" "$match"
done < file2
Você pode forçar os padrões de pesquisa a começar no início da linha assim:
grep -o -f <(sed 's/^/^/' a.txt) file2