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
greppara obter as linhas correspondentes (junto com números de linha) emfile2 - Em seguida, uso
perlpara obter os números de linha dagrepoutput e fazer os comandos sed deles (Ns/.//gexclui todos os caracteres na linha N). - Depois, uso a substituição de processo para alimentar o resultado de
sedexecutando esses comandos nos arquivos paradiff.