2013-05-27 2 views
2

.dir이라는 폴더가 있습니다. 내가 ls -al | grep .dir을 입력하면 검색 결과가 표시되지만 ls -al | grep *dir 또는 (*i*, *d*)을 입력하면 아무 것도 표시되지 않습니다. 나는 왜 그것이 일치하는 것을 찾지 못하는지 이해할 수 없다.Ls 명령 KornShell

답변

4

당신이 할 때 발생할 수 grep *dir 두 가지 예 (foodirbardir) 말할 dir로 끝나는 아닌 숨겨진 파일이있는 경우

  1. , 명령이 grep foodir bardir로 확대 될 것이며 그 것 네가 기대하는대로하지 마라. 하나 개의 파일 또는 하나 이상의 거기에 또한 행동이

  2. dir로 끝나는 더 숨겨지지 않은 파일이 없습니다 ... 따라 다릅니다, 다음 *dir 확대하지만 그렙 호출에서 정규 표현식으로 사용되지 않습니다 . 그러나 grep의 별표는 여러 번 마지막 일치를 반복하는 데 사용되며 이전 문자가 없으므로 자체를 나타냅니다. 결론 : grep은 말 그대로 "* dir"을 찾고 있습니다.

첫 번째 문제는 인용 부호를 사용하십시오. 두 번째 사용 .*dir (모든 문자에 대한 . 스탠드)의 경우 :

ls -la | grep ".*dir" 

또는 당신은 당신의 디렉토리를보고 싶다면 : 당신이 \.를 탈출하지 않으면 것을

ls -la | grep "\.dir" 

참고 그것을 쇼는 또한 다음과 같은 adir, _dir ...

0
  • 인용 부호 별표를 파일 grep으로 전달되기 전에 expanded입니다. 디렉토리가 .dir 디렉토리를 제외하고 비어있는 경우 즉, 의미, grep에 전달 된 문자열 (배쉬에서, 내가 그들의 Korn 쉘의 등가물을 모르는)을 dotglobnullglob 설정 상태에 따라 달라집니다

    $ cd -- "$(mktemp -d)" 
    $ mkdir .dir 
    $ shopt -u dotglob nullglob 
    $ echo *dir 
    *dir 
    $ shopt -s nullglob 
    $ echo *dir 
    
    $ shopt -s dotglob 
    $ echo *dir 
    .dir 
    
  • grepregular expressions이 아니라 globs과 작동합니다. *은 유효한 glob이지만 앞에는 아무 것도없는 유효한 정규 표현식이 아닙니다.