grep은 기본사용법은 적은 찾고자 하는 패턴을 입력하고, 시작디렉토리를 입력하며, 검색을 시작한다.
grep option expr directory // expr에 "" or ''을 넣어주어야 주어한다.
2. 기본옵션
-r 옵션은 순환적으로 밑에 디렉토리까지 검색하지만, 속도가 너무 느리다.
만약 SSD이라면, 적극추천한다. 하지만 재귀에 문제로 너무 오래걸리는 것인지 동작이 멈춘 것인지 알수 없는 경우가 발생.
-n output file의 line number를 알고 싶다면 -n으로 사용
-b -n과 동일한 기능 같은데, newline이 포함안됨
-E 옵션과 확장 패턴을 넣을수 있는데, 이때 AND 와 OR 연산을 사용가능.
-E, --extended-regexp Interpret PATTERN as an extended regular expression * egrep과 동일하다고 한다. -e PATTERN, --regexp=PATTERN Use PATTERN as the pattern. -b, --byte-offset Print the 0-based byte offset -n, --line-number Prefix each line of output with the 1-based line number -R, -r, --recursive Read all files under each directory -v, --invert-match Invert the sense of matching, to select non-matching lines. -h, --no-filename Suppress the prefixing of file names on output. 검색 list의 file 이름 제거
man에서 참고
3. 기본표현식
패턴은 regular expression이라고 부르며, 아래와 같은 meta-characters 사용이 가능하다.
The period . matches any single character. Anchoring The caret ^ and the dollar sign $ are meta-characters that respectively match the empty string at the beginning and end of a line Bracket Expressions [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], and [:xdigit:] [0-9] [0-9A-Za-z] [aBbCcDd] [0123456789] Repetition A regular expression may be followed by one of several repetition operators: ? The preceding item is optional and matched at most once. * The preceding item will be matched zero or more times. + The preceding item will be matched one or more times. {n} The preceding item is matched exactly n times. {n,} The preceding item is matched n or more times. {n,m} The preceding item is matched at least n times, but not more than m times.
man에서 참고
4. 사용확장
- OR 연산
$ grep 'pattern1\|pattern2' filename $ grep -E 'pattern1|pattern2' filename $ egrep 'pattern1|pattern2' filename $ grep -e pattern1 -e pattern2 filename
- AND 연산
$ grep -E 'pattern1.*pattern2' filename $ grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename $ grep -E 'pattern1' filename | grep -E 'pattern2'
- NOT 연산
$ grep -v 'pattern1' filename
5. 사용예제들
아래의 사용예제들은 AND와 NOT , 그리고 OR 연산을 사용하며, -r을 사용한다.
그리고 위의 메타데이타를 사용하기에 쉽게 검색이 된다.
grep은 find에 비해 검색속도가 상당히 많이 느리지만, SSD에서는 적극 추천한다.
단독사용도 가능하지만, find와 조합도 가능하고 다양한 조합도 가능하기 사용자의 능력인것 간다.
$ grep -r 'i2c.*sm.*wri*' . //i2c와 sm과 wri가 3개의 패턴검색 (위의 AND 연산) $ grep -Er 'i2c.*sm.*wri*' . //현재 위와 동일하다 $ grep -r 'i2c.*sm.*wri*' . | grep -v "block" // 위를 일차검색하고, block을 제외 $ grep -r 'i2c*' . | grep -v "block" //i2c 관련 검색을 하지만 block 제외 $ grep -r 'i2c.*write[0-9]' . //i2c와 write0~9까지 의 패턴을 검색. $ grep -r 'i2c.*write[0-9]' . //i2c와 write0~9까지 의 패턴을 검색. $ grep -rE '(i2c|spi).*write[0-9]' . //i2c 나 spi 둘 중 write0~9와 패턴이 중복되는 것 검색
아래의 사이트 참고,
http://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/
http://xero0212.tistory.com/26
http://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples/