나는 특정 디렉터리와 그 하위 디렉터리에 있는 파일과 특정 확장이 있는 파일에서만 내가 제공한 단어가 포함된 줄을 찾는 스크립트(script1.sh라고 가정)를 작성하려고 합니다. 따라서 ./script1.sh python py this.is.what.i.look.for
다음과 같은 결과가 나와야 합니다.
python/abc/file1.py:11: this.is.what.i.look.for and the line can contain other things as well
python/file2.py:412: this.is.what.i.look.for this.toggleButton.getElement())
grep -r을 사용하여 하위 디렉터리에서 검색을 시도했고 이러한 줄을 찾았습니다.
grep -r -e $3 $1
이 줄을 제공하지만 파일 확장자가 다른 다른 파일을 지우는 데 실패하고 코드에 $2를 포함하는 방법을 찾을 수 없습니다. 중간에 줄번호도 넣지 못했어요. 나는 출력을 다음과 같이 두 부분으로 나누려고 시도했지만 python/abc/file1.py:
this.is.what.i.look.for and the line can contain other things as well
다시 awk -F " " '{print $1}
합칠 수는 없었습니다. grep 함수의 출력 부분을 변수에 할당한 다음 다시 합치고 싶지만 역시 실패합니다. t1="grep -r -e $3 $1 | awk -F " " '{print $1}'"
어떤 값을 사용해야 할지 모르기 때문에 "", '', $()를 사용하여 값을 할당해 보았지만 그 중 아무 것도 작동하지 않습니다.
답변1
최소한 GNU에서는 (and )를 사용하여 쉘 스타일 glob 표현식을 사용하여 재귀 grep에서 일치 항목을 제한 grep
할 수 있습니다 .--include
--exclude
grep -r --include='*.py' -e pattern dir
-n
숫자를 추가 하거나 추가 할 수 있습니다 --line-number
. 마지막으로 위치 매개변수를 인용하는 것을 기억하세요.
grep -nr --include="*.$2" -e "$3" "$1"