为什么两个几乎完全相同的 grep 命令返回不同的输出:w/o 和 with filename

为什么两个几乎完全相同的 grep 命令返回不同的输出:w/o 和 with filename

我有 2 个几乎相同的greps:

[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

在第二个查询中,我得到了每行匹配的文件名前缀。我知道为了获得相同的结果,我需要将-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会报告在哪个文件中找到了该字符串。

您想要的是引用您的搜索词,这样它就不会被 shell 扩展,并使用正确的正则表达式:

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

相关内容