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).