regex, ex-regex, $ grep

markyang92·2021년 4월 25일
0

shell-script

목록 보기
5/20
post-thumbnail
  • 다음 글의 Pattern matching 이랑 헷갈리면 안됨!!

정규표현식

     효과예제
.임의의 한 문자 있어야함
없는건 X
grep "exercise.." -> 'exericse.sh'
[ ]문자 클래스
[^ ]부정 문자 클래스
^문자열이나 행의 시작^linux = linux로 시작하는 문자열grep "^-" -> -rwxr--r-- 1 user user 69 3 22 23:24 file
$문자열이나 행의 x$ = x로 끝나는 문자열grep "x$" -> templet.pptxs
{n}앞 요소가 n
{n, }앞 요소가 n
{n, m}앞 요소
n <= 앞요소 <= m
( )하위 식. 정규식 안에 하위 패턴을 지정해 사용할 경우
\n일치하는 n번째 패턴

확장정규표현식

연산자효과
?바로 의 문자가 하나 있거나 없거나'lo?ve' = o가 하나 있거나 없거나
love, lve
++앞의 문자 중 하나 이상이 매칭'[a-z] + linux' = alinux, mylinux, sulinux ...
a|ba 또는 b'love | hate' = love (or) hate가 포함되는 라인

grep

  • 기본은 'Regex'만 사용가능하다. (BRE)
    • -E 옵션: Extended Regex (ERE)
    • -P 옵션: Perl-compatible regular expression (PCRE)
    • -F 옵션: Regex를 사용하지 않고 문자를 그대로 매칭
$ grep [option] 'expression' <FILE>

-E, -F 사용 예

1. sample.txt 내용
string (f|g)ile in the file,
\(f\|g\)ile in the file,

$ grep '\(f\|g\)ile' sample.txt

$ grep -E '(f|g)ile' sample.txt

$ grep -F '(f|g)ile' sample.txt

$ grep -F '\(f\|g\)' sample.txt

그냥 egrep을 주력으로 사용하자...


주요 옵션

\ : regex 와 겹치는 문자 찾을 때

  1. .는 regex에서 아무 '한 문자'가 있는 것. 따라서, .자체를 매칭하기 위해서는 \.로 사용해야함
$ ls | egrep '\.'
hello.sh
world.c

-i : 대소문자 구분 X

$ ls | egrep -i 'W'
world.c
webos.h

-v : 매칭 X (inverse)

$ ls | egrep -v 'w'
hello.c

-n : line number

  1. 찾을 대상 파일 내용
# ===== simple_script.sh ===== #
#!/bin/bash

ARR=(DST1 DST2 DST3)

echo $ARR[2]
echo ${ARR[2]}

  1. egrep 으로 검색
$ egrep -n 'echo' ./simple_script.sh

-r : 특정 디렉토리 이하 모든 파일 대상 매칭

  1. egrep -n 'echo' ./simple_script.sh
$ egrep -n 'echo' ./simple_script.sh
  1. egrep -nr 'echo' ./workspace
$ egrep -nr 'echo' ./workspace
  • ./workspace 이하 수많은 'echo'들이 egrep 된다.

-H : 파일 이름 보여줌


.file : hidden file

ls -al | awk '{print($NF)}' | egrep '^\.'

기타 옵션과 참고사이트

    grep [OPTION...] PATTERN [FILE...]
        -E        : PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석.
        -F        : PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석.
        -G        : PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석.
        -P        : PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석.
        -e        : 매칭을 위한 PATTERN 전달.
        -f        : 파일에 기록된 내용을 PATTERN으로 사용.
        -i        : 대/소문자 무시.
        -v        : 매칭되는 PATTERN이 존재하지 않는 라인 선택.
        -w        : 단어(word) 단위로 매칭.
        -x        : 라인(line) 단위로 매칭.
        -z        : 라인을 newline(\n)이 아닌 NULL(\0)로 구분.
        -m        : 최대 검색 결과 갯수 제한.
        -b        : 패턴이 매치된 각 라인(-o 사용 시 문자열)의 바이트 옵셋 출력.
        -n        : 검색 결과 출력 라인 앞에 라인 번호 출력.
        -H        : 검색 결과 출력 라인 앞에 파일 이름 표시.
        -h        : 검색 결과 출력 시, 파일 이름 무시.
        -o        : 매치되는 문자열만 표시.
        -q        : 검색 결과 출력하지 않음.
        -a        : 바이너리 파일을 텍스트 파일처럼 처리.
        -I        : 바이너리 파일은 검사하지 않음.
        -d        : 디렉토리 처리 방식 지정. (read, recurse, skip)
        -D        : 장치 파일 처리 방식 지정. (read, skip)
        -r        : 하위 디렉토리 탐색.
        -R        : 심볼릭 링크를 따라가며 모든 하위 디렉토리 탐색.
        -L        : PATTERN이 존재하지 않는 파일 이름만 표시.
        -l        : 패턴이 존재하는 파일 이름만 표시.
        -c        : 파일 당 패턴이 일치하는 라인의 갯수 출력.
profile
우츠우츠

0개의 댓글