>> Edit article
이름
제목
패스워드
소스코드 디렉토리에서 뭔가 찾을때 ctags 를 쓰는데 원하는게 나오지 않을 때가 많습니다. 그래서 결국 grep -r 을 쓰게 되는데, 이건 쉽게 쓰면 바이너리까지 다 검사해 버리죠. 그래서 머리 굴려서 간단한 스크립트를 만들었습니다. 이걸 돌리기 위해서는 grep, tee, less, wc, vim, cut, find, xargs 등이 설치되어 있어야 합니다. 사용법은 다음과 같습니다: xgrep SetClockFrequency 현재 디렉토리와 서브 디렉토리에서 소스코드일 것 같은 파일들을 뒤져서 SetClockFrequency 라는 문자열을 찾습니다. 찾은 다음에는 이것을 less로 보여주고, less를 빠져 나가면 다시 vim -q 명령으로 하나씩 열어서 보여 줍니다. vim 안에서 다음에 나온 SetClockFrequency를 찾는 명령은 :cn 이라는 것은 기억 하시는지? xgrep +*.h SetClockFrequency 현재/서브 디렉토리에서 *.h 파일들만을 골라서 이들 중 SetClockFrequency 가 들어 있는 파일을 찾습니다. 그 이후는 위와 같습니다. xgrep +*.h +*.c SetClockFrequency 현재/서브 디렉토리에서 *.h 와 *.c 파일들만을 골라서 SetClockFrequency 들어 있는 줄을 찾습니다. 그 이후는 위와 같습니다. 만약! emacs를 쓰시는 분이라면, 아래 스크립트에서 browse=어쩌구저쩌구 라고 되어 있는 줄을 지우시면 emacs 의 grep 모드용 명령으로 사용하실 수 있습니다. 음 별거 아닌 줄은 저도 알지만, 갑자기 누군가 이런게 필요할 것 같은 예감이 갑자기 스쳐서 적어 봤습니다. ---------------- xgrep.sh ------------------ #!/bin/sh browse="|tee xgrep.out |less -eR; (wc xgrep.out && vim -q xgrep.out)" opts= pats= root=. query= while [ ! -z "$1" ]; do case $1 in +*) newpat=`echo $1 |cut -c2-`; if [ -z "$pats" ]; then pats="-iname $n ewpat"; else pats="-o -iname $newpat"; fi; ;; *) query=$1; shift; break; ;; esac shift done rest=$* if [ -z "$pats" ]; then pats="-iname *.h -o -iname *.hpp -o -iname *.inc -o -iname *.c -o -iname *.cpp -o -iname *.s -o -iname *.asm -o -iname *.java" fi cmd="find ${root} ${pats} |xargs grep -n ${opts} '${query}' ${rest} ${browse}"; #echo "Running: $cmd" eval $cmd ---------------------------------------------- The Awakening
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved