Uma solução alternativa seria remover as linhas correspondentes e depois diferenciá-las. Isso quer dizer que tanto file1
quanto file2
seriam semelhantes:
I need to buy apples.
I need to run the laundry.
I need to get the car detailed.
Você pode fazer isso usando uma combinação de grep
, perl
e sed
:
$ lines_to_ignore=$(grep -nFf file3 file2 | perl -pe 's|^(\d+):.*|$1s/.//g;|')
$ echo $lines_to_ignore
3s/.//g;
$ diff <(sed "$lines_to_ignore" file1) <(sed "$lines_to_ignore" file2)
$ echo $?
0
- Eu uso
grep
para obter as linhas correspondentes (junto com números de linha) emfile2
- Em seguida, uso
perl
para obter os números de linha dagrep
output e fazer os comandos sed deles (Ns/.//g
exclui todos os caracteres na linha N). - Depois, uso a substituição de processo para alimentar o resultado de
sed
executando esses comandos nos arquivos paradiff
.