2016-07-12 6 views
0

私はすべてがタグ"<A_ItemKey>"を含んでいると推測する99999のXMLファイルを持っています。面白いgrep状況

私は、このコマンドを実行すると:

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

を私は75140

結果を取得し、私は、このコマンドを実行する場合は:

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

を私はあると信じて結果99999を(取得正しい)。

なぜこれらの2つのコマンドが同じ結果を表示しないのですか?事前に

感謝

/ポール・

+0

ファイルを連結していくつかのファイルに行末改行がない場合、この結果が得られます。 –

答えて

2

ファイルの一部が改行で終わっていない:-)。

$ 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 

ところで、「grep」と「xml」を1つの文で使用するのは実際は「面白い」です。

+0

ありがとうございます。実際には、cat-commandの上限に75140(または何か)のファイルを処理できないと思っていました.-あなたの答えは理にかなっています。 –

+0

これをもう少し考慮するが、これは状況の理由ではない。タグ「​​」は、同じ行に2回表示されることはありません。 XMLファイルの構造はこれを不可能にします。別の理由が必要です。 –

+0

システムでサポートされている場合は、 'grep -o'を実行してみてください。それぞれのマッチを別々の行に出力する必要があります。 – choroba