2016-07-12 9 views
0

Ich habe 99999 XML-Dateien, die alle das Tag "<A_ItemKey>" enthalten.Lustige grep Situation

Wenn ich diesen Befehl ausführen:

cat *.xml | grep "<A_ItemKey>" | wc -l 

ich das Ergebnis 75140

Allerdings, wenn ich diesen Befehl ausführen:

grep "<A_ItemKey>" *.xml | wc -l 

ich das Ergebnis bekommen 99999 (was ich glaube ist richtig).

Warum zeigen diese beiden Befehle nicht die gleichen Ergebnisse?

Vielen Dank im Voraus :-)

/Paul

+0

Wenn Sie Dateien verketten und einige Dateien keinen abschließenden Zeilenvorschub haben, erhalten Sie dieses Ergebnis ...: -? –

Antwort

2

Einige der Dateien in einer neuen Zeile am Ende nicht.

$ printf '<A_ItemKey>' > 1 
$ printf '<A_ItemKey>' > 2 
$ grep '<A_ItemKey>' 1 2 
1:<A_ItemKey> 
2:<A_ItemKey> 
$ grep '<A_ItemKey>' 1 2 | wc -l 
2 
$ cat 1 2 | grep '<A_ItemKey>' 
<A_ItemKey><A_ItemKey> 
$ cat 1 2 | grep '<A_ItemKey>' | wc -l 
1 

BTW, mit "Grep" und "Xml" in einem Satz ist in der Tat "lustig".

+0

Vielen Dank für Ihre Antworten. Eigentlich dachte ich, es gibt eine Obergrenze für den Katzenkommando, dass es nicht mehr als 75140 (oder etwas) Dateien verarbeiten kann :-) Ihre Antworten ergeben Sinn. –

+0

Wenn man jedoch etwas mehr darüber nachdenkt, kann dies nicht der Grund für die Situation sein. Das Tag "" wird niemals zweimal in derselben Zeile vorkommen. Die Struktur der XML-Dateien macht dies unmöglich. Es muss einen anderen Grund geben. –

+0

Versuchen Sie 'grep -o' auszuführen, wenn Ihr System dies unterstützt. Es sollte jede Übereinstimmung in einer separaten Zeile ausgeben. – choroba