거의 동일한 두 개의 grep 명령이 다른 출력(w/o 및 with filename)을 반환하는 이유는 무엇입니까?

거의 동일한 두 개의 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

두 번째 쿼리에서는 각 행에 대해 일치하는 파일 이름 접두사를 얻습니다. 동일한 결과를 얻으려면 -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

관련 정보