
나는 특정 디렉토리와 그 하위 디렉토리에 있는 파일과 특정 파일이 있는 파일에 있는 파일에서만 내가 제공한 단어가 포함된 행을 찾는 스크립트(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"