[Linux] 리눅스 명령어 - 파일 입출력 명령어(grep)Linux2022. 2. 22. 17:24
Table of Contents
728x90
✅ grep 명령어
- 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자할 때 사용하는 명령어
- 파일의 문자열을 검색할 때, 단순 문자열 매칭이 아닌 정규 표현식에 의한 패턴 매칭 방식을 사용한다.
grep [옵션][패턴][파일명]
정규 표현식(Regular Expression)이란 ?
특정 규칙을 가진 문자열 집합을 표현하기 위한 형식 언어로써, 주로 문자열 패턴 매칭을 검사하거나 또는 문자열을 치환하기 위해 사용한다.
메타 문자(Meta Character) | 설명 |
. | 1개의 문자 매치 (정확히 1개의 문자와 매치) |
* | 앞 문자가 0회 이상 매치 |
{n} | 앞 문자가 정확히 n회 매치 |
{n,m} | 앞 문자가 n회 이상 m회 이하 매치 |
[ ] | 대괄호에 포함된 문자 중 한개와 매치 |
[^ ] | 대괄호 안에서 ^뒤에 있는 문자들을 제외 |
[ - ] | 대괄호 안 문자 범위에 있는 문자들 매치 |
() | 표현식을 그룹화 |
^ | 문자열 라인의 처음 |
$ | 문자열 라인의 마지막 |
? | 앞 문자가 0 또는 1회 매치 (확장 정규 표현식) |
+ | 앞 문자가 1회 이상 매치 (확장 정규 표현식) |
| | 표현식 논리 OR (확장 정규 표현식) |
✅ grep 옵션
- -v : "패턴"을 포함하지 않는 행을 출력한다.
- -i : 대소문자를 구분하지 않는다.
- -n : 줄 번호를 함께 출력한다.
- -l : 파일명을 출력한다.
- -c : 일치하는 라인의 개수를 출력한다.
✅ grep 사용법
대상 파일에서 문자열 검색 | grep "STR" [FILE] |
현재 디렉토리 모든 파일에서 문자열 검색 | grep "STR" * |
특정 확장자를 가진 모든 파일에서 문자열 검색 | grep "STR" *.ext |
대소문자 구분하지 않고 문자열 검색 | grep -i "STR" [FILE] |
매칭되는 PATTERN이 존재하지 않는 라인 선택 | grep -v "STR" [FILE] |
단어(Word) 단위로 문자열 검색 | grep -w "STR" [FILE] |
검색된 문자열이 포함된 라인 번호 출력 | grep -n "STR" [FILE] |
하위 디렉토리를 포함한 모든 파일에서 문자열 검색 | grep -r "STR" * |
최대 검색 결과 갯수 제한 | grep -m 100 "STR" FILE |
검색 결과 앞에 파일 이름 표시 | grep -H "STR" * |
문자열 A로 시작하여 문자열 B로 끝나는 패턴 찾기 | grep "A.*B" * |
0-9 사이 숫자만 변경되는 패턴 찾기 | grep "STR[0-9]" * |
문자열 패턴 전체를 정규 표현식 메타 문자가 아닌 일반 문자로 검색하기 | grep -F "*[]?..." [FILE] |
정규 표현식 메타 문자를 일반 문자로 검색하기 | grep "\*" [FILE] |
문자열 라인 처음 시작 패턴 검색하기 | grep "^STR" [FILE] |
문자열 라인 마지막 종료 패턴 검색하기 | grep "$STR" [FILE] |
✅ grep 사용 예제
# 특정 문자열 찾기
grep [문자열][파일명]
# 정규식을 사용한 예
grep -n '[dD]on₩'t' tasks
- tasks 파일에서 don't 나 Don't 문자열을 포함하는 각 줄을 그 줄 번호와 함께(-n 옵션) 보여준다.
- 이 예제에서 사용된 패턴은 [,] 같은 쉘에서 특별한 의미로 쓰이는 문자들을 포함하며, 하나 이상의 정규식이 사용되었기에 따옴표로 묶어준 경우이다. 큰 따옴표를 사용한다면, 작은 따옴표도 하나의 패턴임을 지시한다. 즉, on't 문자열을 on₩'t 로 표시할 필요가 없다.
# 파이프를 이용한 예
ls -l | grep '^d........x'
- 현재 디렉토리 내용 중에 다른 사용자에게 실행 권한이 부여된 하위 디렉토리가 어떤 것이 있는지를 알아보는 경우이다.
This lists all the directories in the current directory for which other users have execute permission. - - 정규식에서 ^ 문자는 그 줄의 처음을 뜻한다. 즉, 예시의 경우는 각 줄의 첫칸에 d 로 시작해서, 10 번째 칸에 있는 문자가 x 인 임의의 문자열을 찾는 경우이다.
# 결과를 방향 전환해서 파일로 저장하는 경우
grep Smith /etc/passwd > smurffs
- passwd 파일에서 Smith 문자열을 포함하는 줄을 찾아, 그 결과를 smurffs 파일에 기록 하는 경우이다. 이것은 결국 현재 시스템에서 사용하고 있는 사람 중에 그 username 이 Smith 이거나, 실재 이름이 Smith 인 모든 사람을 찾아 볼 수 있다.
# 찾고자 하는 패턴(/etc/*)을 포함하는 파일명만을 출력시킨다.
grep -l telnet /etc/*
참고
728x90
'Linux' 카테고리의 다른 글
[Linux] 리눅스 명령어 - awk (0) | 2022.02.22 |
---|---|
[Linux] 리눅스 명령어 - sort, sed (0) | 2022.02.22 |
[Linux] 리눅스 명령어 - 파일 입출력 명령어(cut, paste, diff) (0) | 2022.02.22 |
[Linux] 리눅스 명령어 - Xargs (0) | 2022.02.22 |
[Linux] 리눅스 명령어 - find 명령어 (0) | 2022.02.22 |
@TTOII :: 뭉게뭉게 클라우드
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!