솔솔
[Linux] grep과 정규 표현식 본문
반응형
🍀 grep이란?
Linux 및 Unix 기반 시스템에서 특정 문자열이나 패턴을 파일 내에서 검색하는 명령어
🍀 grep 명령어 및 주요 옵션
명령어
grep [옵션..] [패턴] [파일..]
주요 옵션
grep --help # grep 옵션 확인 명령어
패턴 선택 및 해석 (Pattern selection and interpretation):
- -E, --extended-regexp: 확장 정규 표현식을 사용하여 패턴 검색.
- -F, --fixed-strings: 패턴을 문자열로 인식하고 검색.
- -G, --basic-regexp: 기본 정규 표현식을 사용하여 패턴 검색.
- -P, --perl-regexp: Perl 정규 표현식을 사용하여 패턴 검색.
- -e, --regexp=PATTERNS: 명시한 패턴으로 검색.
- -f, --file=FILE: 지정한 파일에서 패턴을 가져와 검색.
- -i, --ignore-case: 대소문자를 구분하지 않고 검색.
- -w, --word-regexp: 단어 전체가 일치하는 경우에만 검색.
- -x, --line-regexp: 라인 전체가 일치하는 경우에만 검색.
- -z, --null-data: 데이터 줄의 끝이 0 바이트로 처리 (null 문자 기준).
기타 옵션 (Miscellaneous):
- -s, --no-messages: 에러 메시지를 표시하지 않음.
- -v, --invert-match: 패턴과 일치하지 않는 줄을 출력.
- -V, --version: 버전 정보 출력 후 종료.
출력 제어 (Output control):
- -m, --max-count=NUM: 일치하는 줄을 NUM개까지만 출력.
- -b, --byte-offset: 출력 줄에 바이트 오프셋(위치) 표시.
- -n, --line-number: 일치하는 줄의 줄 번호 출력.
- -H, --with-filename: 파일 이름을 출력에 포함.
- -h, --no-filename: 출력에서 파일 이름 생략.
- -o, --only-matching: 일치하는 부분만 출력.
- -q, --quiet, --silent: 일반 출력을 억제 (에러나 상태 코드만 반환).
- -a, --text: 이진 파일을 텍스트 파일처럼 처리.
- -I: 이진 파일을 일치하지 않는 것으로 취급.
- -d, --directories=ACTION: 디렉토리를 어떻게 처리할지 결정 (read, recurse, skip 중 선택).
- -D, --devices=ACTION: 장치, FIFO, 소켓을 어떻게 처리할지 결정 (read, skip 중 선택).
- -r, --recursive: 디렉토리를 재귀적으로 검색.
- -R, --dereference-recursive: 심볼릭 링크를 따라 재귀적으로 검색.
🍀 정규 표현식
의미 | 내용 |
. | 임의의 문자 하나 |
? | 문자가 존재하거나 존재하지 않음(0, 1) |
* | 문자가 미 존재 또는 무한대로 존재 (0~*) |
+ | 문자가 한번 이상 존재(1~*) |
^ | 기호 바로 뒤의 문자로 문자열이 시작 |
$ | 기호 바로 앞으 문자로 문자열이 끝남 |
{숫자} | 숫자 만큼 반복 |
{숫자,} | 숫자 이상 만큼 반복 |
{숫자1, 숫자2} | 숫자 1 이상, 숫자 2 이하 만큼 반복 |
{문자열} | 문자나 문자열을 묶음 |
[문자1, 문자2, ...] | 대괄호 안에 있는 문자들이 존재하는지 검색 |
[^ ] | [] 안에 포함되지 않은 문자 |
[:알파벳:] | 알파벳만 검색 |
[:알파벳숫자] | 알파벳과 숫자만 검색 |
[:숫자:] | 숫자만 검색 |
[:upper:] | 대문자 검색 |
* 정규 표현식에 사용되는 문자기호를 메타문자 (metacharacters) 라고 함
🍀 grep 명령어 사용해보기 전 사전 준비
1. ' dirA' 폴더 생성
$ mkdir dirA
2. dirA폴더 아래에 example.txt 파일준비
$ cat >> example.txt
고객id 고객명 등급
cust01 아이유 vvip
cust02 차은우 VIP
cust03 지석진 silver
🍀 grep 명령어 사용해보기
문자열로 찾기
1. '아이유'가 들어가는 텍스트 찾기
$ grep '아이유' dirA/example.txt
옵션을 사용해서 문자열로 찾기
1. 'vip'가 들어가는 텍스트 찾기
# 대소문자 구분
$ grep 'vip' dirA/example.txt
# 대소문자 구분 x
$ grep -i 'vip' dirA/example.txt
2. 'vip'가 들어가는 텍스트 라인 번호 찾기
$ grep -n 'vip' dirA/example.txt
정규식을 사용해서 찾기
1. 'c'로 시작하는 텍스트 찾기
$ grep c* dirA/example.txt
2. 's','v'가 들어가는 텍스트 찾기
$ grep [s,v] dirA/example.txt
특정파일에서 문자열 찾기
1. 사용자 계정 정보에서 'user11' 텍스트 찾기
$ cat /etc/passwd | grep 'user11'
🧨 트러블 슈팅
아래의 명령어로 c로시작하고 01로 끝나는 문자를 찾으려고 할때 아무것도 나오지 않는 것이였다.
grep c.+01 dir*/*
# c: 패턴은 문자 c로 시작
# .: 임의의 한 문자
# +: 앞에 있는 문자가 하나 이상 반복
# 01: 그 뒤에 01이라는 숫자가 와야 함
찾아보니
grep의 기본 모드는 Basic Regular Expressions 방식임으로 해당 모드에서는 +는 일반 문자로 처리됨.
+를 특수문자로 사용하려면 grep을 Extended Regular Expressions 모드로 실행해야 하는데 이를 위해 -E 옵션을 추가해야 했음. ( 'grep --help' 명령어로 찾아보면 해당옵션에 대해 설명이 나와있다.)
* 즉 정규식으로 찾고 싶으면 -E 옵션을 잘 써주자!!
grep -E c.+01 dir*/*
'나의보물들 > Linux' 카테고리의 다른 글
[Linux] PAM으로 리눅스 비밀번호 정책 설정하기 (0) | 2024.09.20 |
---|---|
[Linux]Oracle VM에서 동일 IP 가상 머신 분리 및 외부 접근 설정 방법 (2) | 2024.09.20 |
[Linux] 우분투 서버에 도커 설치 및 도커를 이용한 오라클 데이터베이스 설치 (1) | 2024.07.28 |
[Linux] 우분투 서버의 MySQL을 DB 툴로 연결하는 방법 (0) | 2024.07.28 |
[Linux] Mac에서 가상머신 위에 Linux(Ubuntu) 설치하기 (0) | 2024.07.21 |