Come ignorare alcune differenze di diff di comando?
Domanda
diff
ha un -I regexp
opzione, che ignora i cambiamenti che solo inserire o linee di eliminazione che corrispondono alla data espressione regolare. Ho bisogno di un analogo di questo per caso, quando le modifiche sono comprese tra due linee (piuttosto che inserire o linee di cancellazione).
Per esempio, io voglio ignorare tutte le differenze tra come "abXd"
e "abYd"
, per data e X
Y
.
Sembra diff
non ha questo tipo di capacità. C'è qualche valida alternativa per diff
?
Soluzione
Si potrebbe filtrare i due file attraverso sed
per eliminare le linee che non si preoccupano. Lo schema generale è /regex1/,/regex2/ d
Per eliminare qualche cosa fra le linee corrispondenti due espressioni regolari. Ad esempio:
diff <(sed '/abXd/,/abYd/d' file1) <(sed '/abXd/,/abYd/d' file2)
Altri suggerimenti
Il miglioramento sul precedente soluzione da John Kugelman:
diff <(sed 's/ab[XY]d/abd/g' file1) <(sed 's/ab[XY]d/abd/g' file2)
è probabilmente quello che si può essere cercate! Questa versione normalizza la variazione specifica su ogni linea senza cancellare la riga stessa. Questo permette diff di mostrare qualsiasi altro le differenze che rimangono sulla linea.
Supponendo che X e Y sono singoli caratteri, quindi -I 'ab[XY]d'
funziona bene per me.
Si potrebbe utilizzare sed per sostituire le istanze del modello con una stringa standard:
diff <(sed 's/ab[XY]d/ab__REPLACED__d/g' file1) <(sed 's/ab[XY]d/ab__REPLACED__d/g' file2)