본문 바로가기

코리아IT아카데미 [국비과정]/수업

[Linux] 셸 스크립트 grep와 awk

grep, awk

정규 표현식을 사용하기 위한

텍스트 파일 추가

 

^ : 문자열의 시작을 의미

s는 검색할 문자

따라서 s로 시작하는 줄을 찾음

 

test파일에 대문자 A부터 Z까지

문자 중 하나라도 포함된 줄을 찾음

즉, 대문자가 포함된 모든 줄을 출력

 

-n : 매칭되는 줄의 번호

-v : 반대의 매칭, 일치 X

즉, s가 포함되지 않는 줄을 찾음

 

-i : 대소문자 구분하지 않고 검색

urjf라는 문자열을 포함하는 줄을 

대소문자 구분 없이 검색함

 

-C : 컨텍스트 줄을 출력

앞 뒤로 지정된 수의 줄도 함께 출력

 

sevas를 포함하는 줄과

그 앞뒤 1줄씩 함께 출력

 

-i : 대소문자 구분 없이 검색

 -P : Perl의 정규 표현식 문법을 사용

s 또는 r이 포함된 줄을 찾는 정규 표현식

 

[^] : 부정(not)을 의미

 s가 아닌 다른 문자가 하나라도

포함되어 있는 줄을 찾음

 

test파일에 전화번호부 내용 추가

 

[e,o,d]+는 e, o, d 중 하나 이상

포함된 문자열 찾음

[e, o, d]{2} : e, o, d 중 하나가 정확히

2번 나타나는 문자열을 찾음

 

[0-9] : 0부터 9까지의 숫자 의미

{n} : 문자 및 숫자 n번 반복되는 패턴

(즉, 3글자, 4글자, 4글자를 검색)

xxx-xxxx-xxxx 가 숫자 형식의 전화번호를 찾음

 

소문자 a부터 z, 대문자 A부터 Z인

5글자인 알파벳이 연속으로 나온 부분을 찾음

 

^ : 라인의 시작을 의미

[^] : 부정을 의미 (헷갈리지말자)

첫 번째 문자가 대소문자 알파벳으로

정확히 5글자로 이루어진 문자열 찾음

 

\s : 공백을 의미

a부터 z까지 3개, 1부터 9까지 두 자리 찾음

12월 23일 검색됨

 

위 내용과 같음

12월 23일 00시 32분 14~35초 검색

 

awk : 텍스트 처리 도구 (특정 필드 출력)

4번째 필드와 7번째 필드를 출력

 

-F : : 필드 구분자를 콜론(:)으로 지정

$1 : etc/passwd에서 사용자 이름

$7 : etc/passwd에서 로그인 셸

즉, 사용자 이름과 로그인 셸을 출력

 

/ etc/passwd 파일에서 사용자 이름이

root로 시작하는 사용자 계정의 

이름과 로그인 셸을 출력함

 

{a+=5}는 a=a+5와 같음

파일이 4줄밖에 없을 때 

a는 각 줄마다 5씩 증가하여 출력

 

END : a의 최종 값(5의 배수)을 출력

BEGIN : 입력을 처리하기전 한번만 실행

 

/var/log 디렉토리에서 파일을 찾음

\; : -exec 명령어의 끝

 

sum += $5 : 5번째 열의 파일크기 누적

(총 용량을 계산하는 부분)

 

count +=1 : 처리한 파일의 수를 셈함

END : 모든 입력을 처리한 후 실행

총 용량을 출력, sum와 count로 나누어

평균 용량을 출력함