2017-05-23 2 views
0

grep과 관련된 이중 별 문제가 발생합니다. 우분투 16.04를 사용하고 있습니다.grep에서 "**/*"(double star)의 예기치 않은 동작이 발생했습니다

grep 'a'**/* 내 디렉토리 및 모든 하위 디렉토리에있는 모든 파일에서 'a'가 나타나는 것을 발견해야합니다 (재귀 적으로).

그러나 내 시스템에서는 그렇게 작동하지 않습니다. 다음 테스트는 다음과 같습니다 내 파일 디렉토리 .A (에 "A"를 포함하는 파일) 바/ 바 A ("바에서"를 포함하는 파일)/CA/A ("바에서 캘리포니아에"를 포함하는 파일)

그 뒤에 설명은 무엇인가 ...

grep 'a' * 
a:a 
ba is a directory 

grep 'a' **/* 
ba/a:in ba 
grep: ba/ca: is a directory 

첫 번째 사건은 분명하지만, 나는 세 개의 파일을 볼 수있는 두 번째 경우에서 기다리고 있었다?

덕분에, 밥

+1

당신 그렙 버전은 무엇입니까 같은 grep -r를 사용, grep을하려면? 'grep --version' – fedorqui

+0

나는 그것을 생각하지 않았습니다 ... 복잡한 패키지 버전 관리를 위해서 이것은 첫 번째 반사이지만 거기에 나는 단서가 없었습니다! 내 버전이 2.24이면 3.0으로 업그레이드하고 다시 확인하십시오. – BobCitron

답변

1

grep은 이중 별표 "관련"되지 않습니다. 쉘이이를 확장합니다.

사용하는 쉘과 해당 쉘에있는 설정에 따라 이중 별표는 여러 개의 하위 디렉토리 레벨을 확장하는 것을 의미 할 수 있습니다.

재귀 grep -r a .

+0

이것은 합리적인 것처럼 보입니다. 그러나 **/*를 사용하면 파일 이름에 패턴을 지정할 때 이점이 있습니다. 이 문제를 해결하기위한 간단한 해결책이 있습니까 (find + grep 사용 안함)? 시간 내 주셔서 감사합니다. – BobCitron

+1

글쎄, 아니, 당신은'find'를 사용하거나'zsh' 나'bash'처럼 당신이 원하는 것을하는 쉘에서 명령을 실행할 필요가 있습니다. – marcolz

+1

bash의 경우'globstar'를 설정해야합니다 :'shopt -s globstar', https://stackoverflow.com/questions/28176590/what-do-double-asterisk-wildcards-mean – marcolz