리눅스 grep 사용법
in Development on Linux
grep
- 입력되는 파일에서 주어진 패턴 목록과 매칭되는 라인을 검색한 다음 표준 출력으로 검색된 라인을 복사해서 출력
- 정렬 관련 옵션을 사용하면 정렬해 출력할 수 있음
grep
의 검색 범위는 메모리 제한을 넘어가지 않는 범위에서 입력 라인의 제한이 없으며 하나의 라인 안의 전체적인 문자들도 매칭할 수 있음입력 파일의 마지막 바트가
newline
이 아니라면grep
은 작업을 수행한다.- grep 메타문자
^
: 라인의 시작$
: 라인의 끝.
: 하나의 문자 매칭*
: 문자가 없거나 그 이상의 문자들이 매칭[]
: []안의 문자 중 하나라도 매칭[^]
: []안의 문자 중 하나도 매칭되지 않는 문자
grep [옵션] [패턴] [파일명]
일반 옵션
-b
: 검색된 라인에 블록 번호를 붙여서 출력-c
: 매칭된 라인을 디스플레이하지 않고 매칭된 라인의 수를 출력-h
: 파일명은 출력하지 않음-i
: 패턴에서 사용되는 문자열에서 대소문자를 모두 검색-l
: 패턴에 의해 매칭된 라인이 하나라도 있는 파일의 이름만 출력. 출력시 각 파일명은 newline으로 분리-n
: 매칭된 라인을 출력할 때 파일상의 라인 번호를 함께 출력-s
: 조용히 진행. 에러 메세지를 출력하지 않음-v
: 패턴과 매칭되지 않는 라인만 출력-w
:\<
과\>
로 둘러싸인 하나의 단어를 표현식으로 검색
예제
grep -i ls ~/.bash* | grep -v history
- /root 디렉터리 아래에 .bas로 시작하는 모든 파일들에서 ls라는 문자열을 검색하는데, 대소문자를 구분하지 않고 모두 검색하며 결과값 중 history 문자열을 포함하지 않는 줄을 출력
grep korea /etc/passwd
echo $?
- 검색한 내용이 존재하지 않기 때문에 검색에 실패했으므로 종료상태값은 1
ls -l | grep '^d'
- 디렉터리만 출력
ps aux | grep '^ *multi'
- ps aux의 출력을 grep과 파이프하고 라인 앞에 공백을 포함해 multi가 있는 라인 출력
egrep
- grep의 확장으로서 추가적인 정규표현식 메타문자들을 사용할 수 있음
- egrep에 추가된 메타문자들
+
: + 앞의 문자 중 하나 이상이 매칭되는 문자?
: 바로 앞의 문자 하나가 없거나 하나가 매칭되는 문자a|b
: a 또는 b와 매칭되는 문자(or)()
: 문자 그룹
fgrep
- Fixed grep of Fast grep
- 정규 표현식 메타문자들은 사용할 수 없기 때문에 특수 문자 및 $ 문자들은 문자 그대로 인식
카일스쿨 유튜브 채널을 만들었습니다. 데이터 분석, 커리어에 대한 내용을 공유드릴 예정입니다.
PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다
이 글이 도움이 되셨거나 의견이 있으시면 댓글 남겨주셔요.