grep, find, awk 명령어 정리를 잘 해둔 곳이 있어

출처를 남기고 퍼옴.

 

https://jm4488.tistory.com/60

 

[Linux] 자주 사용하는 명령어 (grep, find, exec, xargs, awk)

- grep  : 파일 내용이나 콘솔상의 출력 내용에서 특정 문자열을 찾아서 보여줍니다. 1) 파일에서 word 문자열을 찾아 출력합니다. $ grep word test.txt 2) 현재 디렉토리상에 있는 모든 파일에서 word 문

jm4488.tistory.com

https://infrajp.tistory.com/24

 

인프라 엔지니어가 자주 사용하는 커맨드 모음집 (1)

<목차> 커맨드를 입력하기 전에 알아둘 것 1. 메모리, 디스크 2. 파일 전송, 검색 3. CPU, OS, 패키지 4. 네트워크 5. 계정, 로그인 관련 6. apache 커맨드를 입력하기 전에 알아둘 것 1) 서버에 부하가 걸

infrajp.tistory.com

 

 

- grep

 : 파일 내용이나 콘솔상의 출력 내용에서 특정 문자열을 찾아서 보여줍니다.

 

1) 파일에서 word 문자열을 찾아 출력합니다.

$ grep word test.txt

 

2) 현재 디렉토리상에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep word *

 

3) 현재 디렉토리 및 하위에 있는 모든 파일에서 word 문자열이 포함된 줄을 찾아 출력합니다.

$ grep -r word * 

 

4) 파일에서 word 문자열을 찾아 다음 3줄을 포함해서 출력합니다.

$ grep word test.txt -A 3

 

5) 파일에서 word 문자열을 찾아 이전 3줄을 포함해서 출력합니다.

$ grep word test.txt -B 3

 

6) 파일에서 word 문자열을 찾아 줄번호를 포함해서 출력합니다.

$ grep word test.txt -n

 

7) 파일에서 word 문자열이 포함된 줄을 제외하고 출력합니다.

$ grep -v word test.txt

 

8) 파일에서 (word1 or word2) 문자열이 포함된 줄을 출력합니다. ( or 연산자 = |  는 특수기호이므로 역슬래시를 붙여줍니다. )

$ grep "word1|word2" test.txt

 

9) 파일에서 (word1 and word2) 문자열이 포함된 줄을 출력합니다.

$ grep word1 test.txt | grep word2

 

10) 옵션 혼합 가능

$ grep -rn word /home/test -B 5 -A 3

 

=> /home/test 폴더 하위 모든 파일에서 word 문자열을 찾아서 해당 문자열 이전 5줄, 이후 3줄에 줄번호를 포함해서 출력합니다.

 

11) pipe 로 다른 명령어의 표준 출력과 연계가능

$ cat /home/test/test.txt | grep word

 

-c 옵션으로 찾는 문자열이 포함된 라인의 개수를 함께 출력

-i 옵션으로 대소문자를 구분

-r 옵션으로 하위 dir 까지 검색 가능

 

 

 

 

 

- find

 : 파일 및 디렉토리 등 검색할 때 사용합니다

 

1) /home/test 하위 파일, 디렉토리, 링크, 소켓 등등 모든 것을 출력합니다.

$ find /home/test

 

2) /home/test 하위 파일만 출력합니다. ( -type d = 디렉토리만 출력 )

$ find /home/test -type f

 

3) /home/test 하위 파일 중 크기가 5MB 이상인 파일만 출력합니다.

$ find /home/test -type f -size +5M

 

4) /home/test 하위 파일 중 크기가 5MB 이상이고 권한이 644인 파일만 출력합니다.

$ find /home/test -type f -size +5M -perm 644

 

5) /home/test 하위 파일 중 크기가 5MB 이상이고 파일이 변경된지 5일이 지난 파일만 출력합니다.

(일자 옵션 - s : 초, m : 분, h : 시, d : 일, w : 주)

$ find /home/test -type f -size +5M -mtime +5d 

 

찾은 파일들을 일괄적으로 for문을 돌며 처리할 수 있다.

예를 들어 date 날짜로부터 3일 이후에 만들어진 파일들을 삭제하고 싶다면

find /home/test -mtime -3d -exec rm {} \;

파일들을 {} 내부에 하나씩 for문을 돌면서 넣은 후 rm 명령어를 실행시킨다.

뒤에 \; 은 exec 를 끝낸다는 의미임.

 

 

 

 

 

 

- awk

 : 패턴 탐색과 처리를 위한 명령어로 간단하게 파일에서 결과를 추려내고 가공하여 원하는 결과물을 만들어내는 명령어이다.

 : F 옵션을 통해 구분자를 지정할 수 있다. 콜론으로 구분하고 싶으면 -F: 플러스기호로 구분하고 싶으면 -F+

 : 구분된 인자는 $1 부터 차례대로 할당된다.

 

기본 문법

$ awk 'pattern' filename

$ awk '{action}'  filename

$ awk 'pattern' '{action}' filename

$ awk [ -F fs ] [ -v var=value ] [ 'prog' | -f progfile ] [ file ...  ]

 

ex) $ ls -al

total 1111

drwxr-xr-x  6 test  staff      192  2 20 10:10  .

drwxr-xr-x  4 test  staff      128  2 20 10:10  ..

-rwxr-xr-x  1 test  staff       100  2 20 10:10 a.txt

-rwxr-xr-x  1 test  staff       100  2 20 10:10 b.txt

-rw-r--r--   1 test  staff       100  2 20 10:10 c.txt

 

공백으로 분리하면

$1  : '-rw-r--r--'

$2 : '1'

$3 : 'test'

$4 : 'staff'

$5 : '100'

$6 : '2'

$7 : '20'

$8 : '10:10'

$9 : 'c.txt'

 

$ ls -al | awk -F " " '{print $9}'

.

..

a.txt

b.txt

c.txt

 

위에 -F " " 는 없어도 괜춘. 왜냐면 default 가 공백이니까.

 

$ df -Th | awk '{gsub ("%", "&"); print $4 $5 $6}'

 

위와 같이, awk 의 print 앞에 gsub 라는 내부 함수를 사용할 수 있다.

이 함수는 awk 의 출력값 내 앞의 파라미터 값을 뒤의 파라미터 값으로 replace 한다.

여기서는 % 를 & 로 바꾸었다.

 

$ awk '{ sum += $3; cnt++ } END { print sum/cnt }' mylog.log

 

awk 를 이용하여 평균을 구하는 방법은 위와 같다.

 

 

+ Recent posts