De acordo com Gilles, a opção -I
apenas ignora uma linha se nada mais dentro desse conjunto coincidir com a correspondência de -I
. Eu não entendi totalmente até que eu testei.
O teste
Três arquivos estão envolvidos no meu teste:
Arquivo test1
:
text
Arquivo test2
:
text
#comment
Arquivo test3
:
changed text
#comment
Os comandos:
$ # comparing files with comment-only changes
$ diff -u -I '#.*' test{1,2}
$ # comparing files with both comment and regular changes
$ diff -u -I '#.*' test{2,3}
--- test2 2011-07-20 16:38:59.717701430 +0200
+++ test3 2011-07-20 16:39:10.187701435 +0200
@@ -1,2 +1,2 @@
-text
+changed text
#comment
O caminho alternativo
Como não há resposta até agora explicando como usar a opção -I
corretamente, fornecerei uma alternativa que funcione em shells bash:
diff -u -B <(grep -vE '^\s*(#|$)' test1) <(grep -vE '^\s*(#|$)' test2)
-
diff -u
- diff unificado-
-B
- ignorar linhas em branco
-
-
<(command)
- um recurso bash chamado substituição de processos que abre um descritor de arquivo para o comando, este elimina a necessidade de um arquivo temporário -
grep
- comando para imprimir linhas (não) que correspondem a um padrão-
-v
- mostra linhas não correspondentes -
E
- use expressões regulares estendidas -
'^\s*(#|$)'
- uma expressão regular que corresponde a comentários e linhas vazias-
^
- corresponde ao começo de uma linha -
\s*
- corresponde ao espaço em branco (tabulações e espaços) se houver -
(#|$)
corresponde a uma marca de hash ou, alternativamente, ao final de uma linha
-
-