fgrep 명령어

검색 대상 문자열에 $, ^ 등 정규식 메타 문자가 많이 포함된 경우 fgrep이 유용하다. fgrep은 검색 문자열에 고정 문자(fixed character)를 지정하여 각 문자를 백슬래시로 이스케이프할 필요가 없게 한다. 검색 문자열에 개행 문자가 포함되어 있으면 각 줄은 검색에서 일치시킬 개별 고정 문자 문자열로 취급된다. 즉, fgrep은 고정 문자를 검색하는 데 사용된다. 고정 문자란 문자열이 문자 그대로 해석된다는 의미이며, 메타 문자가 존재하지 않으므로 정규식을 사용할 수 없다. fgrep을 실행하는 것은 grep에서 -F 옵션을 사용하는 것과 동일하다.

문법

fgrep [-b] [-c] [-h] [-i] [-l] [-n] [-s] [-v] [-x] [ -e pattern_list] [-f pattern-file] [pattern] [file]

매개변수

  • -b: 각 행 앞에 해당 행이 발견된 블록 번호를 붙인다. 첫 번째 블록은 0이며, 컨텍스트에 따라 블록 번호를 찾을 때 유용하다.
  • -c: 패턴이 포함된 행의 수만 출력한다.
  • -h: 여러 파일을 검색할 때 파일 이름을 출력하지 않는다.
  • -i: 비교할 때 대소문자 구분을 무시한다.
  • -l: 일치하는 행이 있는 파일 이름을 한 번만 출력하고 줄바꿈으로 구분한다. 패턴이 여러 번 나타나도 파일 이름을 반복하지 않는다.
  • -n: 파일에서 각 행 앞에 행 번호를 붙인다. 첫 번째 행은 1이다.
  • -s: 조용히 동작한다. 즉, 오류 메시지만 표시하며, 오류 상태를 확인하는 데 유용하다.
  • -v: 패턴이 포함된 행을 제외한 모든 행을 출력한다.
  • -x: 완전히 일치하는 행만 출력한다.
  • -e pattern_list: pattern list의 문자열을 검색한다. 문자열이 -로 시작할 때 유용하다.
  • -f pattern-file: 패턴 파일에서 패턴 목록을 가져온다.
  • pattern: 검색 입력 중에 사용할 패턴을 지정한다.
  • file: 패턴을 검색할 파일의 경로 이름이다. 파일 인수를 지정하지 않으면 표준 입력이 사용된다.

예시

test.c 파일 내용은 다음과 같다.

#include <stdio.h>

int main(void) {
    puts("Hi there");
    puts("Hi there");
    puts("Hi there");
    return 0;
}

Hi가 포함된 행을 매칭한다.

fgrep Hi test.c
#    puts("Hi there");
#    puts("Hi there");
#    puts("Hi there");

Hi가 포함된 행의 개수를 매칭한다.

fgrep -c Hi test.c
# 3

매칭을 반전하여 Hi가 포함되지 않은 행을 선택한다.

fgrep -v Hi test.c
# #include <stdio.h>
#
# int main(void) {
#     return 0;
# }

i가 포함된 행을 대소문자 구분 없이 매칭한다.

fgrep -i i test.c
# #include <stdio.h>
# int main(void) {
#     puts("Hi there");
#     puts("Hi there");
#     puts("Hi there");

파일의 한 행과 완전히 일치하는 행만 출력한다.

fgrep -x "    return 0;" test.c
#     return 0;

Hi가 포함된 행을 매칭하고 행 번호를 출력한다.

fgrep -n Hi test.c
# 4:    puts("Hi there");
# 5:    puts("Hi there");
# 6:    puts("Hi there");

현재 디렉터리의 모든 파일에서 h*에 매칭되는 파일을 재귀적으로 검색한다. fgrep을 사용하므로 *가 정규식 패턴으로 동작하지 않고 리터럴 고정 문자 *로 일치하므로 출력이 없다. 만약 grep과 동일한 인자를 사용하면 행 번호를 출력하고 대소문자를 무시한다. 터미널에서 실제로 매칭된 위치는 빨간색 글씨로 표시된다.

fgrep -rni "h*" ./
# [출력 없음]

참고

https://www.computerhope.com/unix/ufgrep.htm
https://www.runoob.com/linux/linux-comm-fgrep.html
https://www.geeksforgeeks.org/fgrep-command-in-linux-with-examples/

태그: fgrep grep linux text-search command-line

8월 12일 03:08에 게시됨