셸 스 크 립 트 - 정규 표현 식 과 텍스트 프로세서 (grep, sed, awk 용법)

62083 단어
목차
  • 1. 정규 표현 식 개술
  • 2. 기초 정규 표현 식
  • 1、grep
  • 2, 정규 표현 식 확장 (egrep)
  • 3. 텍스트 프로세서 sed
  • 1. sed 명령 의 흔 한 용법
  • 2. 용법 예시
  • 4. awk 도 구 는 입력 텍스트 를 한 줄 씩 읽 고 지정 한 일치 모드 에 따라 찾 습 니 다.
  • 1. awk 흔 한 용법
  • 2. 용법 예시
  • 5. sort 도구 에서 자주 사용 하 는 파일 정렬 도구: sort, 유 니 크
  • 6. 유 니 크 도구
  • 7. tr 도구
  • 정규 표현 식 개요
  • 정규 표현 식 은 정규 표현 식, 일반 표현 식 이 라 고도 부른다.하나의 문자열 을 사용 하여 특정한 문법 규칙 에 부합 되 는 일련의 문자열 을 설명 하고 일치 시 키 는 것 은 문자열 과 일치 하 는 방법 입 니 다. 일부 특수 기 호 를 통 해 특정한 문자열 을 신속하게 찾 고 삭제 하 며 교체 하 는 것 을 실현 합 니 다.

  • 2. 기초 정규 표현 식
    1、grep
  • 옵션: - n 은 줄 번호 - i 는 대소 문자 구분 없 음 - v 역방향 필터
  • (1) 특정 문자 찾기
  • grep -n 'the' test.txt    ##   ‘the’  
    grep -in 'the' test.txt   ##       
    grep -n  '*' test.txt     ##    *  
    
  • (2) 중 괄호 '[]' 를 이용 하여 집합 문자 찾기
  • grep -n 'sh[io]rt' test.txt    ##    short shirt  
    grep -n 'oo' test.txt          ##    oo 
    grep -n '[^w]oo' test.txt      ##  w     oo  
    grep -n '^[a-zA-Z]' test.txt   ## a z A Z    
    grep -n '[^a-z]oo' test.txt    ##  oo    a-z  
    grep -n '[0-9]' test.txt       ##        
    

    - v 는 '[^]' 와 차이 가 있어 요.
  • (3) 줄 의 첫 번 째 "^" 와 줄 의 끝 문자 "$"
  • 를 찾 습 니 다.
    grep -n '\.$' test.txt     ##   .     
    grep -n '^[a-z]' test.txt  ##   a-z     
    grep -n '^[^a-zA-Z]' test.txt  ##    a-z A-Z     
    grep -n‘^$’test.txt            ##     
    
  • (4) 임의의 문자 "." 와 중복 문자 "*"
  • 를 찾 습 니 다.
    grep -n 'w..d' test.txt      ##wd     2   
    grep -n 'ooo*' test.txt      ##*       0      
    grep -n 'woo*d' test.txt     ##    w    d  o     
    grep -n 'w.*d' test.txt      ##  w    d 
     *
    
  • (5) 연속 문자 범위 '{}' 을 찾 습 니 다. 횟수 범 위 를 제한 하 는 문자 '{}' 은 전의 문자 '\' 를 이용 하여 '{}' 문 자 를 일반 문자 로 변환 해 야 합 니 다
  • ① o 를 2 번 반복 하 는 문 자 를 조회 하고 o 의 배수 와 일치 합 니 다.
    grep -n 'o\{2\}' test.txt
    

    ② 조 회 는 w 로 시작 하여 d 로 끝나 고 중간 에 o 문자열 2 ~ 5 개 를 포함 합 니 다.
    grep -n 'wo\{2,5\}d' test.txt
    

    ③ 조 회 는 w 로 시작 하여 d 로 끝나 고 중간 에 2 개 또는 2 개 이상 의 o 문자열 이 포함 되 어 있 습 니 다.
    grep -n 'wo\{2,\}d' test.txt
    

    2, 정규 표현 식 확장 (egrep)
  • 기본 정규 표현 식 을 사용 하여 파일 의 빈 줄 과 줄 의 첫 번 째 줄 을 '\ #' 이외 의 줄 을 조회 하고 'grep - v' ^ KaTeX parse error: Expected group after '^' at position 21:... txt | grep - v '^̲#’”확장 정규 표현 식 을 사용 하면... | ^ \ # 'test. txt' 에서 작은 따옴표 에 있 는 파이프 기호 표시 나 (or) grep 명령 은 기본 정규 표현 식 만 지원 합 니 다. 확장 정규 표현 식 을 사용 하려 면 egrep 또는 awk 명령
  • 을 사용 해 야 합 니 다.
  • 확장 정규 표현 식 흔 한 메타 문자 - + 역할: 하나 이상 의 이전 문자 반복
  •   :  “egrep -n 'wo+d' test.txt”   ##    "wood" "woood" "woooooood"    
     grep -n ‘woo*d’test.txt      grep -n ‘wo\{1,\}d’test.txt   
    

    ? 역할: 0 개 또는 하나의 앞 글자
      :  “egrep -n 'bes?t' test.txt”    ##    “bet”“best”      
     grep -n 'wo\{0,1\}d' test.txt
    

    | 역할: 사용 또는 (or) 방식 으로 여러 문 자 를 찾 습 니 다.
       :  “egrep -n 'of|is|on' test.txt”   ##  "of"  "if"  "on"   
    

    () 역할: "그룹" 문자열 찾기
        :“egrep -n 't(a|e)st' test.txt”。 “a” “e”  “()”    ,  “|”  ,    "tast"  "test"   
    

    () + 역할: 여러 중복 되 는 그룹 을 판별 합 니 다.
      :“egrep -n 'A(xyz)+C' test.txt”  ##     "A"   "C""xyz"      
    

    3. 텍스트 프로세서 sed
     sed                            
     sed            、         
    

    1. sed 명령
  • sed [옵션] '조작' 인자
  • sed [옵션] - f scriptfile 매개 변수 "매개 변수" 는 작업 대상 파일 을 말 합 니 다. 여러 작업 대상 이 존재 할 때 파일 간 에 쉼표 를 사용 합 니 다. "스 크 립 트 파일 은 스 크 립 트 파일 을 표시 합 니 다. '- f' 옵션 으로 지정 해 야 합 니 다. 스 크 립 트 파일 이 대상 파일 앞 에 나타 날 때 지정 한 스 크 립 트 파일 을 통 해 입력 한 대상 파일 을 처리 하 는 것 을 표시 합 니 다.
  • sed 명령 옵션 - e 또는 – expression =: 입력 한 텍스트 파일 을 지정 한 명령 이나 스 크 립 트 로 처리 합 니 다. -f 또는 – file =: 입력 한 텍스트 파일 을 지정 한 스 크 립 트 파일 로 처리 합 니 다. -h 또는 – help: 도움말 표시 -n. – quiet 또는 silent: 처리 후의 결과 만 표시 합 니 다. -i: 텍스트 파일 을 직접 편집 합 니 다.
  • '조작' 은 파일 작업 에 대한 동작 행동, 즉 sed 명령 을 지정 하 는 데 사 용 됩 니 다.일반적으로 'n1 [, n2]' 조작 매개 변수 형식 을 사용 합 니 다.n1, n2 는 선택 할 수 있 는 것 으로 조작 을 하 는 줄 수 를 대표 한다. 만약 에 조작 을 5 ~ 20 줄 사이 에 해 야 한다 면 '5, 20 동작 행위' 를 나타 낸다.흔히 볼 수 있 는 조작 은 다음 과 같은 몇 가 지 를 포함한다.a: 증가, 현재 줄 아래 에 지정 한 내용 을 추가 합 니 다.c: 바 꾸 기, 선택 한 줄 을 지정 한 내용 으로 바 꿉 니 다.d: 선택 한 줄 을 삭제 합 니 다.i: 삽입, 선택 한 줄 에 지정 한 내용 을 삽입 합 니 다.p: 인쇄, 줄 을 동시에 지정 하면 지정 한 줄 을 인쇄 합 니 다.줄 을 지정 하지 않 으 면 모든 내용 을 인쇄 하 는 것 을 표시 합 니 다.인쇄 되 지 않 은 문자 가 있 으 면 ASCII 코드 로 출력 합 니 다.보통 "- n" 옵션 과 함께 사용 합 니 다.s: 바 꾸 기, 지정 한 문 자 를 바 꿉 니 다.y: 문자 변환.

  • 2. 용법 예시
  • (1) 조건 에 맞 는 텍스트 출력 (p 는 정상 출력 표시)
  • sed -n 'p' test.txt     ##      ,    cat test.txt
    sed -n '3p' test.txt	##    3  
    sed -n '3,5p' test.txt	##   3~5  
    sed -n 'p;n' test.txt	##       ,n          
    sed -n 'n;p' test.txt	##       ,n          
    sed -n '1,5{p;n}' test.txt ##    1~5        (  135  ) 
    sed -n '10,${n;p}' test.txt	##    10            
    
  • sed 명령 과 정규 표현 식 을 결합 하여 사용 하 는 예제
  • sed -n '/the/p' test.txt	##    the   
    sed -n '4,/the/p' test.txt	##     4         the   
    sed -n '/the/=' test.txt    ##    the        ,  (=)      
    sed -n '/^PI/p' test.txt	##   PI     
    sed -n '/[0-9]$/p' test.txt	##         
    sed -n '/\/p' test.txt##      wood   ,\<\>     
    
  • (2) 조건 에 맞 는 텍스트 (d) nl 명령 을 삭제 하여 파일 의 줄 수 를 계산 합 니 다
  • nl test.txt | sed '3d'	    ##    3  
    nl test.txt | sed '3,5d'	##    3~5  
    nl test.txt | sed '/cross/d'##     cross   ,     8 
             cross   , !        ,  '/cross/!d'
    sed '/^[a-z]/d' test.txt	##           
    sed '/\.$/d' test.txt    	##   "."    
    sed '/^$/d' test.txt	    ##      
                                                
    “sed -e‘/^$/{n;/^$/d}’test.txt”  ##    “cat -s test.txt”  ,n 
    
  • (3) 조건 에 맞 는 텍스트 s (문자열 교체), c (전체 줄 / 전체 블록 교체), y (문자 변환) 명령 옵션
  • sed 's/the/THE/' test.txt	##        the     THE
    sed 's/l/L/2' test.txt	    ##       2   l     L
    sed 's/the/THE/g' test.txt	##       the     THE
    sed 's/o//g' test.txt  	    ##       o   (     )
    sed 's/^/#/' test.txt	    ##      # 
    sed '/the/s/^/#/' test.txt	##   the        # 
    sed 's/$/EOF/' test.txt	    ##          EOF
    sed '3,5s/the/THE/g' test.txt	##   3~5       the     THE
    sed '/the/s/o/O/g' test.txt	    ##   the        o      O
    
  • (4) 조건 에 맞 는 텍스트 H: 클립보드 로 복사 하기;g. G: 클립보드 의 데 이 터 를 지정 한 줄 에 덮어 쓰 거나 추가 합 니 다.w: 파일 로 저장 하기;r: 지정 한 파일 읽 기;a: 추가 지정 내용.
  • sed '/the/{H;d};$G' test.txt	##   the          ,{;}      
    sed '1,5{H;d};17G' test.txt	    ##   1~5         17   
    sed '/the/w out.file' test.txt	##   the         out.file
    sed '/the/r /etc/hostname' test.txt	##   /etc/hostname          the      
    sed '3aNew' test.txt	        ##   3         ,   New
    sed '/the/aNew' test.txt	    ##   the           ,    New
    sed '3aNew1
    New2'
    test.txt ## 3 , \n
  • (5) 스 크 립 트 편집 파일 '- f' 옵션 을 사용 하여 호출
  • sed '1,5{H;d};17G' test.txt	//   1~5         17   
         vi opt.list
         1,5H   ---  
         1,5d    ---  
         17G    ---  
    sed -f opt.list test.txt  --    
    
  • (6) sed 직접 조작 파일 예제
  •  vsftpd     ,        ,       (     )。
    [root@localhost ~]# vim local_only_ftp.sh
    #!/bin/bash
    #
    SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf"
    #         ,      /etc/vsftpd/vsftpd.conf.bak         ,         cp         
    [ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak #           ,      
    sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
    sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
    #  vsftpd   ,          
    systemctl restart vsftpd systemctl enable vsftpd
    [root@localhost ~]# chmod +x local_only_ftp.sh
    

    4. awk 도 구 는 입력 텍스트 를 한 줄 씩 읽 고 지정 한 일치 모드 에 따라 찾 습 니 다.
    조건 에 맞 는 내용 을 포맷 출력 하거나 여과 처리 하면 상호작용 이 없 는 상태 에서 상당히 복잡 한 텍스트 작업 을 실현 할 수 있다.
    1. awk 흔 한 용법
  • awk 옵션 '모드 나 조건 {편집 명령}' 파일 1 파일 2... / / 파일 의 조건 에 맞 는 내용 을 걸 러 내 고 출력 합 니 다
  • awk - f 스 크 립 트 파일 1 파일 2.또한 간단 한 수학 연산 도 할 수 있다. 예 를 들 어 +, -, *, /,%, ^ 는 각각 더하기, 빼 기, 곱 하기, 나 누 기, 나머지 와 곱 하기 를 나타 낸다.작은 따옴표 에 큰 괄호 '{}' 을 붙 여 데이터 에 대한 처리 동작 을 설정 합 니 다.awk 는 대상 파일 을 직접 처리 할 수도 있 고 '- f' 를 통 해 스 크 립 트 를 읽 어 대상 파일 을 처리 할 수도 있 습 니 다.awk - F ':' {print $1, $3, $4} '/ etc / passwd 에서 / etc / passwd 의 사용자 이름, 사용자 ID, 그룹 ID 등 열 을 찾 습 니 다
  • awk 는 몇 개의 특수 한 내장 변 수 를 포함 하고 있 습 니 다. (직접 사용 가능) 다음 과 같 습 니 다. FS (- F): 줄 마다 텍스트 의 필드 구분 자 를 지정 하고 기본 값 은 빈 칸 이나 탭 위치 입 니 다. -F NF: 현재 처 리 된 줄 의 필드 개수 입 니 다.NR: 현재 처 리 된 줄 의 줄 번호 (번호) 입 니 다. $0: 현재 처 리 된 줄 의 전체 내용 입 니 다. $n: 현재 처리 줄 의 n 번 째 필드 (n 번 째 열).FILENAME: 처 리 된 파일 이름 입 니 다.RS: 데이터 기록 구분, 기본 값 은 모든 행위 의 기록 입 니 다.

  • 2. 용법 예시
  • (1) 줄 별로 텍스트 출력
  • awk '{print}' test.txt	     ##      ,    cat test.txt
    awk '{print $0}' test.txt	 ##      ,    cat test.txt
    awk 'NR==1,NR==3{print}' test.txt	##    1~3    
    awk '(NR>=1)&&(NR<=3){print}' test.txt	##    1~3    
    awk 'NR==1||NR==3{print}' test.txt	##    1  3    
    awk '(NR%2)==1{print}' test.txt	##          
    awk '(NR%2)==0{print}' test.txt	##          
    awk '/^root/{print}' /etc/passwd	   ##   root     
    awk '/nologin$/{print}' /etc/passwd	   ##    nologin     
    awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
        ##   /bin/bash      ,    grep -c "/bin/bash$" /etc/passwd
    awk 'BEGIN{RS=""};END{print NR}' /etc/squid/squid.conf
        ##             
    
  • (2) 필드 별로 텍스트 출력
  • awk '{print $3}' test.txt	     ##     (         )   3    
    awk '{print $1,$3}' test.txt	 ##        13    
    awk -F : '$2==""{print}' /etc/shadow   ##          shadow   
    awk 'BEGIN {FS=":"}; $2==""{print}' /etc/shadow
     ##            shadow   
    awk -F : '$7~"/bash"{print $1}' /etc/passwd
      ##          7       /bash      1    
    awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services
      ##      8       1        nfs      12    
    awk -F : '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
      ##     7       /bin/bash    /sbin/nologin     
      
    
  • (3) 파이프, 작은 따옴표 로 셸 명령
  • 을 호출 합 니 다.
    awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
     ##   wc -l        bash      ,    grep -c "bash$" /etc/passwd
    awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'
     ##   w   ,          
    awk 'BEGIN { "hostname" | getline ; print $0}'
     ##   hostname,         
    

    5. sort 도구 에서 자주 사용 하 는 파일 정렬 도구: sort, uniq
  • 문법 은 'sort [옵션] 매개 변수' - f: 대소 문자 무시; -b: 줄 마다 앞 에 있 는 빈 칸 무시 하기; -M: 월 별로 정렬 하기; -n: 숫자 에 따라 정렬 하기; -r: 역방향 정렬; -u: 유 니 크 와 같 습 니 다. 같은 데 이 터 는 한 줄 만 표시 합 니 다. -t: 구분자 지정, 기본 값 [Tab] 키 로 구분한다. -o: 정렬 된 결 과 를 지정 한 파일 로 저장 합 니 다. -k: 정렬 영역 을 지정 합 니 다.
  •    1/etc/passwd 
    [root@localhost ~]# sort /etc/passwd        
       2/etc/passwd 
    [root@localhost ~]# sort -t ':' -rk 3 /etc/passwd 
       3/etc/passwd  user.txt 
    [root@localhost ~]# sort -t ':' -k 3 /etc/passwd -o user.txt 
    [root@localhost ~]# cat user.txt 
    

    도구
  • 유 니 크 도 구 는 리 눅 스 시스템 에서 sort 명령 과 결합 하여 사용 되 며 파일 의 중복 줄 을 보고 하거나 무시 합 니 다.
  • 문법 형식 은 유 니 크 [옵션] 매개 변수 - c: 계산 하기; -d: 중복 줄 만 표시 합 니 다. -u: 한 번 나타 난 줄 만 표시
  •    1 testfile 
    [root@localhost ~]# cat testfile
    Linux 10
    Linux 20
    Linux 30
    Linux 30
    CentOS 6.5
    CentOS 6.5
    CentOS 7.3
    CentOS 7.3
    [root@localhost ~]# uniq testfile
    Linux 10
    Linux 20
    Linux 30
    CentOS 6.5
    CentOS 7.3
       2 testfile        ,               。
    [root@localhost ~]# uniq -c testfile
       3 testfile 
    [root@localhost ~]# uniq -d testfile
    

    도구
    표준 입력 에서 온 문 자 를 교체, 압축, 삭제 하 는 데 자주 사용 된다.한 그룹의 문 자 를 바 꾼 후에 다른 그룹의 문자 로 바 꿀 수 있 습 니 다. 항상 아름 다운 단일 명령 을 만 드 는 데 사 용 됩 니 다.
  • 문법 형식 은 tr [옵션] [매개 변수] - c: 첫 번 째 문자 집합 에 속 하지 않 는 모든 문 자 를 대체 합 니 다. -d: 첫 번 째 문자 집합 에 속 하 는 모든 문 자 를 삭제 합 니 다. -s: 연속 으로 중복 되 는 문 자 를 하나의 문자 로 표시 합 니 다. -t: 첫 번 째 문자 집합 이 두 번 째 문자 집합 보다 많은 문자
  • 를 먼저 삭제 합 니 다.
       1:             。
    [root@localhost ~]# echo "KGC" | tr 'A-Z' 'a-z'
    kgc
       2:          。
    [root@localhost ~]# echo "thissss is	a text linnnnnnne." | tr -s 'sn'
    this is a text line.
       3:          。
    [root@localhost ~]# echo 'hello world' | tr -d 'od'
    hell wrl
    

    좋은 웹페이지 즐겨찾기