[Centos 7] String Process(문자열 프로세스) - Grep, Egrep, Fgrep, Awk
2022. 11. 16. 14:55ㆍ리눅스(Linux)
What is grep?
- 파일 전체를 뒤져 정규 표현식에 대응하는 모든 행들을 출력
# grep <word> <filename>
$ grep 사용예제
# grep root /etc/passwd
- /etc/passwd 파일 에서 root 라는 패턴을 찾음
# ps -ef | grep root
- Ps 명령어의 출력 결과에서 root 를 포함하는 모든 행들이 화면에 출력됨
# grep -n '^root' /etc/passwd
- root 로 시작하는 행과 행 번호(n) 를 출력
# grep '.bak$'FILE
- bak 로 끝나는 행을 출력, 작은 따옴표는 달러 기호가 해석되는 것을막는다
# grep '[A-Z]…[0-9]'FILE
- 대문자로 시작하고 숫자로 끝나는 다섯 문자의 열이 포함된 행을 출력
# ps -ef | grep "^ *user1"
- User1 으로 시작하는 행을 검색하며, 문자열 앞에 0개 혹은 임의 개수의 공백이 와도 무관하다
$ grep with option
# grep -n '^south' datafile
- (-n) 옵션은 패턴이 찾아진 행 번호를 함께 출력
# grep -v 'root'datafile > temp
# mv temp datafile
- (-v) 옵션은 해당 패턴이 포함되지 않은 모든 행을 출력하며,파일에서 특정 내용의 이력을 삭제하는데 쓰이기도 한다
# grep -i 'pat' datafile
- (-i) 옵션은 대소문자를 구별하지 않음. 그러므로 문자열 pat가 어떠한
대소문자 조합으로 이루어져 있더라도 무관
# grep -l 'SE' *
datafile
databook
- (-l) 옵션은 패턴이 찾아진 파일의 행 번호 대신, 단지 파일 이름만 출력
# grep –c 'west' datafile
3
- (-c) 옵션은 패턴이 찾아진 행의 총 수를 출력, 패턴이 발견된 횟수가 아니라 '행의 수' 가 출력
# grep -w 'north' datafile
north NO Margot Weber 4.5 5
- (-w) 옵션은 패턴이 다른 단어의 일부가 아닌 하나의 단어가 되는 경우만 찾음
$ grep with Regular Expression
# grep '[a-z]\{9\}' datafile
- 소문자가 적어도 아홉 개가 연속적으로 나오는 문자열을 포함한 모든 행을 출력
# grep '\<[a-z].*h\>' datafile
- 소문자 하나로 시작하고, 이어서 임의 개수의 여러 문자가 나오며, n으로 끝나는 단어가 포함된 모든 행을 출력
(.*) 기호는 공백을 포함한 임의의 문자들을 의미
What is egrep?
- Grep에서 제공하지 않는 확장된 정규표현식 메타문자를 사용할 수 있음
# egrep <word> <filename>
$ egrep 사용예제
# egrep 'NW|EA' datafile
- 정규표현식 NW나 EA가 포함된 행을 출력
# egrep '3+' datafile
- 숫자 3이 한 번 이상 등장하는 행을 출력
# egrep '2\.?[0-9]' datafile
- 숫자 2 다음에 마침표가 없거나 한 번 나오고, 다시 숫자 하나가 오는 행을 출력
# egrep '(no)+' datafile
- 패턴 no가 한 번 이상 연속해서 나오는 행을 출력한다.
# egrep 'S[h|u]' datafile
- 문자 S 다음에 h나 u가 나오는 행을 출력
# egrep 'Sh|u' datafile
- 패턴 Sh 나 u를 포함한 행을 출력
What is fgrep?
- Fgrep은 grep 명령어와 동일하게 동작, 하지만 정규표현식 메타 문자들을 특별히 취급하지 않음
# fgrep '문자열' <filename>
# fgrep '[A-Z]…[0-9]' <filename>
- [A-Z]…[0-9] 를 정규표현식 메타문자로 특별히 취급하지 않고 문자열 자체로 인식
- [A-Z]…[0-9] 자체를 포함하는 문자열을 찾는다.
What is Awk?
- 자료 처리 및 리포트 생성에 사용하는 프로그래밍 언어
- 입력 데이터로는 표준 입력이나 여러 개의 파일 또는 다른 프로세스의 결과를 사용할 수 있다.
- 사용자가 지정한 패턴 검색이나 특별한 작업을 수행하기 위해 파일을 행 단위로 조사
# awk 'pattern'filename
# awk '{action}'filename
# awk 'pattern {action}'filename
- 기본형식
$ awk 사용예제
# awk '{print $1}'datafile
- 파일의 첫 번째 필드를 출력한다, 첫 번째 필드는 각 행의 맨 왼쪽 경계에서 시작하고 공백 문자로 구분되는 영역을 의미한다
# awk '/root/{print $1, $2}'datafile
- 파일에서 root 를 포함하는 행들의 첫 번째와 두 번째 필드를 출력한다
# df | awk '$2 > 80000'
- df 명령어를 통해 출력되는 내용 중 두 번째 필드가 80000 보다 큰 행이 출력이 된다
# date | awk '{print “Month :”$2 “\nYear:”$6}'
- date 명령을 통해 출력되는 두 번째 필드(month) 와 여섯 번째 필드 (year)를 print 함수를 이용하여 출력
# awk '{print NR, $1,$3}'datafile
- NR 변수(하나의 레코드를 처리한 후 1이 증가하는 변수) 를 사용하여 레코드의 번호와 함께 파일의 내용대로 출력
# awk '{print $1, $3, NF}'datafile
- NF 변수(필드의 개수를 출력라는 변수) 를 사용하여 레코드의 번호와 함께 각 행의 필드의 개수도 함께 출력
# awk -F : '/root/{print $0}'/etc/passwd
- “:”구분자를 기준으로 필드를 나누며 root 를 포함하는 행을 출력
# awk -F : '/^[ns]/{print $1}'datafile
- n 이나 s 로 시작하는 행의 첫 번째 필드를 출력
# awk -F '[\t]''{print $1, $2, $3}'employees
- TAB 으로 필드를 구분하여 나누며 첫 번째, 두 번째, 세 번째 필드를 출력한다.
- 작은 따옴표로 묶은 이유는 쉘이 대괄호를 해석해 버리는것을 방지하기 위해서이다
# awk '$1 ~ /[bB]ill/'employees
- Match 연산자(~, tilde)는 특정 레코드나 필드 내에서 일치하는 정규 표현식 패턴이 존재 하는지 검사하는 데 쓰인다
# awk '$1 !~ /ly$/'employees
- 첫 번째 필드가 ly 로 끝나지 않는 행들을 출력한다
# awk '$4 ~ /Chin$/{print “The price is $”$8 “.”}'FILE
- 네 번째 필드가 Chin 으로 끝나면 문자열 The price is $와 여덟번째 필드($8) 및 마침표를 함께 출력한다
'리눅스(Linux)' 카테고리의 다른 글
[Centos 7] User Account Management(사용자 계정 관리) (0) | 2022.11.20 |
---|---|
[Centos 7] String Process(문자열 프로세스) - sed, echo, diff, sort (0) | 2022.11.17 |
[Centos 7] Regular Expression(정규 표현식) (0) | 2022.11.16 |
[Centos 7] Standard I/O Redirection (0) | 2022.11.16 |
[Centos 7] Shell & 변수 (0) | 2022.11.15 |