'grep'에 해당되는 글 2건

  1. 2011.06.29 grep alias
  2. 2007.11.01 예전에 정리했었던 정규표현식? ㅋㅋ

grep alias

Linux 2011. 6. 29. 11:32
항상 SVN에서 source code를 받아서 ctags + cscope로 indexing을 하는 버릇이 있다. (주로 kernel)

간혹가다가 어떠한 point를 찾고 싶을 때 logic을 열심히 따라가서 debugging하는 경우도 있지만, 만사 귀찮은 경우는 log를 보고 grep을 하는 경우가 다반사인데, 이럴때 항상 SVN과 ctags, cscope는 걸리적 거린다... (결과가 조금 있는 것도 아니고 무지 많을 때는 더욱!)

그럴때는 아래와 같이 .profile에 alias를 걸어주자.

$ vi ~/.profile
 ...
 alias grep='grep --color --exclude-dir=".svn" --exclude=cscope.out --exclude=tags'
 ...

$ source ~/.profile
$ alias
alias grep='grep --color --exclude-dir=".svn" --exclude=cscope.out --exclude=tags'


grep의 man page를 보면 알겠지만, --exclude-dir은 지정된 directory를 무시, --exclude는 지정된 file을 무시하게 된다.
Posted by 강군님

댓글을 달아 주세요

 이 낯선 이름의 linux 명령어가 뭐냐고 묻는다면 grep이라고 대답해야겠다.  원래는 grap인줄 알았는디 -_-(뜻이 비슷하니까~~ ㅋㅋㅋㅋ)

 음... 또 Global Regular Expression Print 라고도 부르는데, 어떤게 맞는지는 확인을 안해봐서 -_- 어쨌든 grap에서 유래된것이 아닌건 확실하다(이것도 확실한지 아닌지는 -_-ㅋㅋㅋ)

 그럼 여기서 중요한건 Regular Expression인데, 해석하자면 "정규식"이 되겠다.  linux 시스템에서의 정규식이라는 건, 검색을 목적으로 활용하며 그 범위는 vi, grep, ex, sed, awk, emacs, more, less 등이 되겠다.  shell의 전개방식과는 약간 다르다.

 정규식의 예를 들자면

kang (kang을 의미)

^kang (kang으로 시작하는 라인 의미)

kang$ (kang으로 끝나는 라인 의미)

[Kk]ang (맨 앞 글자는 K나 k이고 뒤는 ang를 의미)

k[aeiou]ng (역시 가운데 글자가 a나 e, i, o, u 중에 하나인 것 의미)

ka.g (ka와 g 사이에 아무 글자나 한글자)

.... (아무 글자나 4글자)

kang* (g가 0번이상 계속되는 것)

kang.*(kang으로 시작하는 모든 것)

[a-z] (a~z)

[a-z]+ (소문자가 한문자 이상인 것)

 grep에서 많이 쓰이는 옵션으로는 -i와 -r이 있으며, i는 대소문자를 구분 안하겠다는 뜻이고 -r은 재귀적으로 검색하는 것이다(하위 디렉토리까지).

 grep에서 regular expression을 사용하여 검색을 하였는데, 검색하니까 find를 빼놓을 수가 없다.  하지만 find는 regular expression을 사용하지 않는 것에 주의해야 한다.

 find의 탐색 조건은

-type d : directory를 찾음

-type f : file을 찾음

-name kang : kang이라는 이름의 file

-name '*.h' : .h로 끝나는 모든 file

-name '*.?' : 마지막 문자 바로 앞 글자가 .인 file

 find의 옵션은

-atime 7 : 정확히 7일 전에 살펴보았던 file

-atime -14 : 14일 이후에 내용을 수정했던 file.  13일부터 1일 전까지도 포함

-mtime 20 : 20일 전에 수정했던 file

-mtime +45 : 45일보다 이전에 수정했던 file

-newer kang : file kang보다 이후에 내용을 수정한 file

 find의 명령은

-print : 찾은 file 출력

-exec : 찾은 file에 특정 명령을 할 수 있으며, 다음과 같다.

$ find . -atime -100 -exec rm {} \;

 100일 이후에 수정했던 file을 찾아서 지워버린다.  {}는 찾아진 file을 의미하며, 끝은 반드시 \;로 끝내야 한다.

-ok : -exec와 비슷하지만, 실행 여부를 확인한다는 것이 다른점이다.

 find는 linux의 여타 명령어들 처럼 조합으로 함으로써 더욱 강력하게 된다.

$ find . -name '*.h' -exec grep '#define' {} \;

 현 directory 아래의 모든 header file에서 #define이 들어간 file을 찾게 된다.

Posted by 강군님
TAG Find, grep, linux

댓글을 달아 주세요