ほぼ同じ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