ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shell Scripting grep awk sed
    카테고리 없음 2022. 12. 16. 17:51
    [root@localhost /]# date +%D 일 월 년
    12/16/22
    [root@localhost /]# date +%d 일 
    16
    [root@localhost /]#

    1. grep

       - 개요

          : 특정 조건에 맞는 문자열 패턴 검색

          :라인(줄) 단위로 출력

       - 실습

    grep '^samadal' /etc/passwd : 라인의 맨 앞에 있는 문자(열)을 검색

    grep 'samadal&' /etc/passwd : 라인의 맨 뒤에 있는 문자(열)을 검색

    grep '\<samadal' /etc/passwd : 라인의 임의의 위치에 첫 문자(열)을 검색

    grep 'samadal\>' /etc/passwd :  라인의 임의의 위치에 끝 문자(열)을 검색

    grep '^sam.*' /etc/passwd  : sam으로 시작되는 모든 문자열을 검색

    grep '^[sam].*' /etc/passwd : 라인의 맨 앞에 있는 문자 중에 s나 a나 m중에 아무거나 시작하는 단어 문자(열)을 검색

    grep '[^sam].*' /etc/passwd : 라인의 맨 앞에 있는 문자 중에 s나 a나 m중를 제외한 문자들을 검색해줌

    grep '^[l-s]' /etc/passwd | nl : 라인에서 문자의 범위(l부터s까지) 안에 있는 모든 것을 검색

    grep '^[^l-s]' /etc/passwd | nl : 라인에서 문자의 범위(l부터s까지) 에 있는 모든 것을 검색

     

    grep '\nologin$' /etc/passwd | nl : 특정 라인에서 임의의 문자로 끝나는 모든 문자(열) 검색 (중요)


    grep -v 'samadal' /etc/passwd | nl : samadal외의 나머지 것들을 출력

     

    grep 'daemon' /etc/init.d/* | nl : 디렉터리 안에 'daemon' 명령어를 포함하는 파일 검색

    grep -l 'daemon' /etc/init.d/* | nl : 디렉터리 안에 'daemon' 명령어를 포함하는 파일 목록 검색

    grep '\.' /etc/passwd : 문자열 안에 .이 들어있는 파일 검색

     

     

    2. awk

       - 개요

          : 특정 조건에 맞는 문자열 패턴 검색(행(필드) 단위로 출력)

       -문법

          : awk로 시작하는 경우

               ; awk 'PATTERN' 파일명

               ; awk '{PATTERN}' 파일명

               ; awk '/PATTERN/ {ACTION}' 파일명

          : 명령어의 결과를 이용한 경우

               ; command | awk 'PATTERN'

               ; command | awk '{PATTERN}'

               ; command | awk '/PATTERN/ {ACTION}' 

       - 실습

       

    6번째 필드와 5번째 필드를 출력해라

    리눅스 명령어가 담긴 파일을 검색 : find / -name passwd -type f

     

    명령어 안에 명령어를 쓸 떄는 ` ` 를 이용해야 한다.

    grep 'samadal' `find /home/samadal/ -name passwd -type f` | awk '{print $1}'  : 첫번째 필드 구문에서 사마달이라는 파일이 있는 것을 검색해라

     

     : /etc/passwd의 맨 뒤에 'halt'로 끝나는 라인을 출력

              ; cat, grep 이용

              ; grep 이용

              ; awk 이용     

    awk 는 중요하니 기억하길 바람 

    필드는 행 을 뜻함

     

    [root@localhost /]# df -h | grep '/s' | awk '{print $6}'
    /dev/shm
    /sys/fs/cgroup
    /
    [root@localhost /]# df -h | awk '{print $6}' | grep '/s'
    /dev/shm
    /sys/fs/cgroup
    [root@localhost /]# df -h | awk '/\/s/ {print $6}'
    /dev/shm
    /sys/fs/cgroup
    /
    [root@localhost /]#

    위의 차이점을 셜명 하자면...

    df -h | grep '/s' | awk '{print $6}' : 

    df -h | awk '{print $6}' | grep '/s' :

    df -h | awk '/\/s/ {print $6}' :

     

    3. Sed

       - 개요

             : 저장이 안되는 결과값(39%) 등을 저장하기 위해 '%'를 제거해주는 유틸리티

             : 메모리 버퍼에서 문자열을 편집하는 기능

             : vi 에디터의 '치환'과 유사한 기능         

       - 실습

    df -h | awk '/\/$/ {print $5}' | sed 's/%// ' : %제거 하고 얻은 결과값

             : 마운트 정보의 다섯번째 필드의 값을 기호(%)를 제거하고 출력

             : 변수로 치환한 후 출력

             : 사용자 정보 중 SAMADAL 계정명만 출력

              : 사용자가 접속한 시간대를 확인한 후 '/KSH/USER.TXT' 로 저장

    ; 는 두줄을 한줄로 썼다

    이렇게 하면 시간과 SAMADAL 만 표시됨

    [root@localhost /]# date +%Y 총년
    2022
    [root@localhost /]# date +%y 22만
    22
    [root@localhost /]# date +%M 미닛 분
    16
    [root@localhost /]# date +%m MONTH 달
    12
    [root@localhost /]# date
    2022. 12. 16. (금) 17:16:40 KST
    [root@localhost /]#
    2022. 12. 16. (금) 17:16:40 KST
    [root@localhost /]# date +%D
    12/16/22
    [root@localhost /]# date +%d
    16
    [root@localhost /]# date +%H                시간
    17
    [root@localhost /]# date +%h                달을 한글로 표현할 때
    12월
    [root@localhost /]#
    [root@localhost /]# date +%s 초단위로 년을 여지까지 샌거
    1671178789  
    [root@localhost /]# date +%S     초 
    57
    [root@localhost /]# date
    2022. 12. 16. (금) 17:20:01 KST
    [root@localhost /]#

    :위의 예제에서 결과를 파일명 (sam_년월일시분초_접속한 시간대.txt)으로 저장

    ps -ef | awk '{print $1,$5}'| grep 'samadal'> /ksh/sam_`date '+%Y%m%d%H%M%S'`_`ps -ef | grep 'samadal' | awk '{print $5}'`.txt

Designed by Tistory.