2つのほぼ同じgrepコマンドが異なる出力(w / oとwith filename)を返すのはなぜですか?

2つのほぼ同じgrepコマンドが異なる出力(w / oとwith filename)を返すのはなぜですか?

ほぼ同じ2つがありますgrep

[Alex@localhost tmp]$ grep /bin/bash /etc/passwd 
root:x:0:0:root:/root:/bin/bash
AlexL:x:500:500::/home/AlexL:/bin/bash
user1:x:501:501:user1 12345:/home/user1:/bin/bash

そして

[AlexL@localhost tmp]$ grep /bin/*sh /etc/passwd    
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:AlexL:x:500:500::/home/AlexL:/bin/bash
/etc/passwd:user1:x:501:501:user1 12345:/home/user1:/bin/bash

2番目のクエリでは、各行に対して一致するファイル名のプレフィックスを取得します。同じ結果を得るには、-hオプションを2ndに入れる必要があることを知っていますが、grep私の質問は次のとおりです。

なぜ別の出力を返すのですか? コンテンツを追加する必要がありますか?

これには、/etc/passwd実際のユーザー(デーモンおよびシステムユーザーなし)からの検索が含まれます。

使用:CentOS 6.4、grep Gnuバージョン2.6.3

答え1

知覚が拡大します/bin/*sh。もしそうなら、あなたが実際にやっていることは

grep /bin/bash /bin/dash /bin/rbash /bin/rzsh /bin/sh /bin/zsh /etc/passwd

つまり、、、、、、、などの/bin/bashファイルから文字列を検索します。/bin/dash/bin/rbash/bin/rzsh/bin/sh/bin/zsh/etc/passwd

(の出力と比較してくださいecho /bin/*sh /etc/passwd。)

複数のファイルを検索する必要があるため、grepその文字列が見つかったファイルを報告します。

必要なのは、クエリを引用してシェルで拡張されないようにし、正しい正規表現を使用することです。

grep '/bin/.*sh' /etc/passwd

関連情報