2013-04-23 7 views
5

Ich versuche, den Standard-Diff-Befehl in Linux zu verwenden Inorder in 2 files.The Inhalt der Datei Unterschiede zu finden sind wie folgt:Ignorieren Stern (*), während diff tat in Linux

File1

Jim 
Jack 
Tracy* 
Michelle 

File2

Jim 
Jack 
Tracy 
Michael 

diff File1 File2 gibt mir folgendes:

< Tracy* 
< Michelle 
--- 
> Tracy 
> Michael 

Allerdings mag ich diff den Stern (*) und gibt die folgende Ausgabe ignorieren:

< Michelle 
--- 
> Michael 

Ist es möglich, das zu tun?

Antwort

1

ShinTakezou Ansatz verwenden, aber dieses Mal mit sed:

diff <(sed 's/\*$//' file1) <(sed 's/\*$//' file2) 
+1

ja .. das diff mit sed funktioniert !!! Vielen Dank... – Amistad

4

diff -I '*$' FILE1 FILE2 

-I RE --ignore-matching-lines = Versuchen RE

Änderungen ignorieren alle übereinstimmen, deren Linien RE

Hinweis: das funktioniert nur mit der Linie Sternchen enden.

+0

Funktioniert nicht ... diff -I '* $' File1 File2 3,4c3,4 Tracy > Michael – Amistad

+0

Haben Sie das Sternchen nach "-I" verpasst? –

+0

vielleicht ist der Grund hier http://www.gnu.org/software/diffutils/manual/diffutils.html#Specified-Lines --- Ich habe versucht und nicht das Sternchen verpasst und bestätige, dass es nicht wie erwartet intuitiv funktioniert . – ShinTakezou

0

Wenn Sie ein Diff verwenden, das nicht über die Option -I verfügt, können Sie Linien, die Sterne enthalten, in temporäre Dateien kopieren und dann die temporären Dateien verteilen. Wenn Sie Bash verwenden, können Sie "zwei Rohre" verwenden, aber wenn Sie es wahrscheinlich haben, haben Sie auch das diff mit der -I Option. Auf jeden Fall wäre es

sed 's/*$//' file1 >file1.temp 
sed 's/*$//' file2 >file2.temp 
diff file1.temp file2.temp 

oder

diff <(sed 's/*$//' file1) <(sed 's/*$//' file2) 

(nicht getestet, aber es könnte auch in anderen Shells arbeitet) sein

note der "Star" wird entfernt und aus dem diff Sichtweise hat es nie existiert.

+0

Funktioniert nicht wie gewünscht. Das grep -v löscht tatsächlich jede Zeile, die einen Asterix enthält, und daher hat eine temporäre Datei tracy und eine andere nicht. Ich suchte nach einer Option, um den Asterix einfach zu ignorieren. – Amistad

+0

habe die Frage falsch beantwortet ... möchtest du das Sternchen im finalen Vergleich behalten? Wenn nicht, ist die Lösung einfach. Sonst habe ich keine Idee, diff -I' abseits – ShinTakezou

+1

Das diff mit sed wirkt wie ein Charme..danke !!! – Amistad

Verwandte Themen