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?

È stato utile?

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top