프로그래밍

[Linux] GREP (feat. 특정 단어를 특정 파일에서 찾기)

Beginner:) 2022. 6. 3.
320x100

GREP(Global Regular Expression Print)는 텍스트 파일에 원하는 문자열을 찾아낼때 사용하는 명령어로 주로 log파일을 뒤질때 사용한다.

 

grep에 대한 옵션을 살펴보고 예제로  특정 단어가 포함되는 파일찾기, 특정 확장자 파일에서 특정 단어가 포함된 구역 출력하기를 예제로 실행해본다.

 

GREP 사용방법은 grep [OPTION] [PATTERN] [FILE] 식으로 사용하면 된다.

 

grep --help를 사용하면 자세한 설명을 볼 수 있다.

 

Pattern selection and interpretation:
  -E, --extended-regexp     PATTERNS are extended regular expressions
  -F, --fixed-strings       PATTERNS are strings
  -G, --basic-regexp        PATTERNS are basic regular expressions
  -P, --perl-regexp         PATTERNS are Perl regular expressions
  -e, --regexp=PATTERNS     use PATTERNS for matching
  -f, --file=FILE           take PATTERNS from FILE
  -i, --ignore-case         ignore case distinctions
  -w, --word-regexp         match only whole words
  -x, --line-regexp         match only whole lines
  -z, --null-data           a data line ends in 0 byte, not newline

Miscellaneous:
  -s, --no-messages         suppress error messages
  -v, --invert-match        select non-matching lines
  -V, --version             display version information and exit
      --help                display this help text and exit

Output control:
  -m, --max-count=NUM       stop after NUM selected lines
  -b, --byte-offset         print the byte offset with output lines
  -n, --line-number         print line number with output lines
      --line-buffered       flush output on every line
  -H, --with-filename       print file name with output lines
  -h, --no-filename         suppress the file name prefix on output
      --label=LABEL         use LABEL as the standard input file name prefix
  -o, --only-matching       show only nonempty parts of lines that match
  -q, --quiet, --silent     suppress all normal output
      --binary-files=TYPE   assume that binary files are TYPE;
                            TYPE is 'binary', 'text', or 'without-match'
  -a, --text                equivalent to --binary-files=text
  -I                        equivalent to --binary-files=without-match
  -d, --directories=ACTION  how to handle directories;
                            ACTION is 'read', 'recurse', or 'skip'
  -D, --devices=ACTION      how to handle devices, FIFOs and sockets;
                            ACTION is 'read' or 'skip'
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive  likewise, but follow all symlinks
      --include=GLOB        search only files that match GLOB (a file pattern)
      --exclude=GLOB        skip files and directories matching GLOB
      --exclude-from=FILE   skip files matching any file pattern from FILE
      --exclude-dir=GLOB    skip directories that match GLOB
  -L, --files-without-match  print only names of FILEs with no selected lines
  -l, --files-with-matches  print only names of FILEs with selected lines
  -c, --count               print only a count of selected lines per FILE
  -T, --initial-tab         make tabs line up (if needed)
  -Z, --null                print 0 byte after FILE name

Context control:
  -B, --before-context=NUM  print NUM lines of leading context
  -A, --after-context=NUM   print NUM lines of trailing context
  -C, --context=NUM         print NUM lines of output context
  -NUM                      same as --context=NUM
      --color[=WHEN],
      --colour[=WHEN]       use markers to highlight the matching strings;
                            WHEN is 'always', 'never', or 'auto'
  -U, --binary              do not strip CR characters at EOL (MSDOS/Windows)

 


 

그러면 특정 폴더에서 특정단어가 있는 파일을 찾아보자 

 

 

/home/pi 폴더에서 GPIO명령어를 사용하는 파일들을 찾고싶다 가정한다.

sudo grep -Ril "GPIO" /home/pi

- R : 하위 모든 디렉터리

- i : 대소문자 무시

- l(L) : 문자열이 아닌 파일이름을 출력

 

 

/home/pi 폴더에서 확장명이 .c/.h 파일 중 GPIO명령어를 사용하는 부분을 찾고싶다 가정한다. (참고로 --include는 포함하는, --exclude는 포함하지 않는... 이라는 옵션)

grep --include=\*.{c,h} -Rnw "gpio" /home/pi

- r : 하위 모든 디렉터리

- n : 줄번호 출력

- w : 한 단어별로 일치

 

 

반응형

댓글