Você pode fazer isso com muita facilidade usando grep :
$ grep -Ff 123.txt 789.txt
http://www.a.com/kgjdk-jgjg/
http://www.b.com/gsjahk123/
http://www.c.com/abc.txt
O comando acima imprimirá todas as linhas do arquivo 789.txt que contém qualquer uma das linhas de 123.txt . O -f significa "leia os padrões para procurar neste arquivo" e o -F informa ao grep para tratar os padrões de busca como strings e não suas expressões regulares padrão.
Isso não funcionará se as linhas de 123.txt contiverem espaços à direita, grep tratará os espaços como parte do padrão para procurar um não corresponderá se ocorrer dentro de uma palavra. Por exemplo, o padrão foo (observe o espaço à direita) não corresponderá a foobar . Para remover espaços à direita do seu arquivo, execute este comando:
$ sed 's/ *$//' 123.txt > new_file
Em seguida, use o new_file para grep:
$ grep -Ff new_file 789.txt
Você também pode fazer isso sem um novo arquivo, usando o sinalizador i :
$ sed -i.bak 's/ *$//' 123.txt
Isso alterará o arquivo 123.txt e manterá uma cópia do original chamado 123.txt.bak .
(Observe que essa forma do -i flag para sed assume que você tem o GNU sed ; para o BSD sed use -i .bak com um espaço entre eles).