리눅스 실무의 이해리눅스마스터 1급 · 2012년03월10일 · 10/100
10.현재 디렉토리와 현재 디렉토리의 모든 하위 디렉토리에 있는 파일 중 .c 로 끝나는 파일들에서 ihd라는 문자열이 포함된 파일을 찾기 위한 명령으로 알맞은 것은?
1
find . -name "*.c" | grep "ihd"
2
find . -name "*.c" -exec grep ihd {} \;
3
grep -l "ihd" | find -name "*.c"
4
find . -name "*.c" -exec grep -l ihd {} \;정답
해설
grep 을 사용한 문자열 찾기 1. 현재 디렉토리에서 +하위 디렉토리 포함 검색 (./) - $root> grep rw "찾는 문자열" ./ 2. -i 옵션을 사용하여 대소문자 구분없이 검색 - $root> grep -i -l "찾는 문자열" * -r 2>/dev/null 3. 한글/영어 모두 가능한 문자열 찾기 - $root> find . -exec grep -l "찾는 문자열" {} \; 2>/dev/null 4. 한글/영어/대소문자 구분없이 문자열 찾기 -$root> find . -exec grep -i -l "찾는 문자열" {} \; 2>/dev/null 5. 검색 문자열을 찾은 후 치환하기 - $root> find . -exec perl -pi -e 's/찾은문자열/바꿀문자열/g' {} \; 2>/dev/null cf) 2>/dev/null 이란 ? /dev/null 은 유닉스의 블랙홀과 같은 파일이다. 이 파일은 모든 출력을 흡수한다. 2> 는 에러 메시지가 발생할 경우에는, 즉 에러 출력을 한다. => 따라서 조합을 하면 에러가 발생해도 출력하지 않음. 문자열이 있으면 해당 경로/파일명만 출력하고 그 외에는 출력하지 않음.