셸 프로 그래 밍 의 정규 표현 식 (3)

7120 단어 shellLinuxawk
awk 도구Linux/UNIX 시스템 에서 awk 은 강력 한 기능 을 가 진 편집 도구 로 입력 텍스트 를 한 줄 씩 읽 고 지정 한 일치 모드 에 따라 찾 으 며 조건 에 맞 는 내용 을 포맷 출력 하거나 여과 처리 하면 상호작용 이 없 는 상황 에서 복잡 한 텍스트 작업 을 실현 하여 Shell 스 크 립 트 에 널리 응용 된다.각종 자동화 배치 임 무 를 완수 하 다.
1. awk 흔 한 용법
  • awk 에서 사용 하 는 명령 형식 은 다음 과 같 습 니 다. 작은 따옴표 에 큰 괄호 를 더 한 “{}” 은 데이터 에 대한 처리 동작 을 설정 하 는 데 사 용 됩 니 다.awk 은 대상 파일 을 직접 처리 할 수 있 고 “-f” 을 통 해 스 크 립 트 를 읽 어 대상 파일 을 처리 할 수 있 습 니 다.
    awk    '      {    }'   1   2       //             
    awk -f        1   2                      //          ,       
  • sed 명령 은 항상 한 줄 의 처리 에 사용 되 며, awk 은 한 줄 을 여러 개의 '필드' 로 나 눈 다음 에 처리 하 는 경향 이 있 으 며, 기본 적 인 상황 에서 필드 의 구분 자 는 빈 칸 이나 tab 키 이다.awk 실행 결 과 는 print 의 기능 을 통 해 필드 데 이 터 를 인쇄 하여 표시 할 수 있다.awk 명령 을 사용 하 는 과정 에서 논리 연산 자 “&&” 을 사용 하여 '와', “||” 은 '또는', “!” 은 '비' 를 나 타 낼 수 있다.또한 간단 한 수학 연산 도 할 수 있다. 예 를 들 어 +, -, *, /, %, ^ 은 각각 더하기, 빼 기, 곱 하기, 나 누 기, 나머지 와 곱 하기 를 나타 낸다.
  • 은 Linux 시스템 에서 /etc/passwd 은 매우 전형 적 인 포맷 파일 로 각 필드 간 에 “:” 을 구분자 로 분리 하고 Linux 시스템 의 대부분의 로그 파일 도 포맷 파일 로 이 파일 에서 관련 정 보 를 추출 하 는 것 은 운영 하 는 일상적인 업무 내용 중 하나 이다./etc/passwd 의 사용자 이름, 사용자 ID, 그룹 ID 등 열 을 찾 으 려 면 다음 awk 명령 을 실행 하면 됩 니 다.
    [root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd
    root 0 0
    bin 1 1
    daemon 2 2
    adm 3 4
    ...//      ...
    //awk                ,  sed   ,            。    awk               ,          ( )          ( )。           ,awk  shell           ,  $1、$2、$3„      (  )      。  awk $0     (  )。                 。awk         。awk        “-F   ”         。
  • awk 은 몇 가지 특수 한 내장 변수 (직접 사용 가능) 를 포함 하 는데 다음 과 같다
  • 내장 변수
    설명 하 다.FS
    줄 마다 텍스트 의 필드 구분 자 를 지정 합 니 다. 기본 값 은 빈 칸 이나 탭 위치 입 니 다.NF
    현재 처 리 된 줄 의 필드 개수NR
    현재 처 리 된 줄 의 줄 번호 (번호)$0
    현재 처 리 된 줄 의 전체 줄 내용 입 니 다.$n
    현재 처리 줄 의 n 필드 (n 열)FILENAME
    처 리 된 파일 이름RS
    데이터 기록 구분, 기본 값
    , 즉 모든 행위 의 기록 입 니 다.
    2. 용법 예시
    1) 줄 별로 텍스트 출력
    [root@localhost opt]# awk '{print}' bbb.txt    //      ,    cat bbb.txt
    this is
    the wood
    wood
    wod
    the wood
    this is test
    [root@localhost opt]# awk '{print $0}' bbb.txt       //      ,    cat bbb.txt
    this is
    the wood
    wood
    wod
    the wood
    this is tes
    [root@localhost opt]# awk 'NR==1,NR==3{print}' bbb.txt    //    1~3    
    this is
    the wood
    wood
    [root@localhost opt]# awk '(NR>=1)&&(NR<=3){print}' bbb.txt   //    1~3    
    this is
    the wood
    wood
    [root@localhost opt]# awk 'NR==1||NR==3{print}' bbb.txt   //    1  、  3    
    this is
    wood
    [root@localhost opt]# awk '(NR%2)==1{print}' bbb.txt     //          
    this is
    wood
    the wood
    [root@localhost opt]# awk '(NR%2)==0{print}' bbb.txt    //          
    the wood
    wod
    this is test
    [root@localhost opt]# awk '/^the/{print}' bbb.txt       //     the    
    the wood
    the wood
    [root@localhost opt]# awk '/wood$/{print}' bbb.txt      //     wood    
    the wood
    wood
    the wood
    [root@localhost opt]# awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
    2                           //   /bin/bash      ,    grep -c "/bin/bash$" /etc/passwd
    [root@localhost opt]# awk 'BEGIN {RS=""};END{print NR}' httpd.txt   //             
    38

    2) 필드 별로 텍스트 출력
    [root@localhost opt]# vim bbb.txt     //      
    this is txt
    the wood aaa
    wood is bbb                      //      
    wod is ccc
    the wood AAA
    this is test
    ~                                                                            
    ~                                                                                                 
    :wq                              //    
    [root@localhost opt]# awk '{print $3}' bbb.txt          //     (         )   3    
    txt
    aaa
    bbb
    ccc
    AAA
    test
    [root@localhost opt]# awk '{print $1,$3}' bbb.txt       //        1、3    
    this txt
    the aaa
    wood bbb
    wod ccc
    the AAA
    this test
    [root@localhost opt]# awk -F ":" '$2=="*"{print}' /etc/shadow  //     “*”    shadow  
    bin:*:17110:0:99999:7:::
    daemon:*:17110:0:99999:7:::
    adm:*:17110:0:99999:7:::
    lp:*:17110:0:99999:7:::
    sync:*:17110:0:99999:7:::
    shutdown:*:17110:0:99999:7:::
    halt:*:17110:0:99999:7:::
    mail:*:17110:0:99999:7:::
    operator:*:17110:0:99999:7:::
    games:*:17110:0:99999:7:::
    ftp:*:17110:0:99999:7:::
    nobody:*:17110:0:99999:7:::
    [root@localhost opt]# awk 'BEGIN{FS=":"};$2=="*";END{print}' /etc/shadow 
    bin:*:17110:0:99999:7:::                        //     “*”    shadow  
    daemon:*:17110:0:99999:7:::
    adm:*:17110:0:99999:7:::
    lp:*:17110:0:99999:7:::
    sync:*:17110:0:99999:7:::
    shutdown:*:17110:0:99999:7:::
    halt:*:17110:0:99999:7:::
    mail:*:17110:0:99999:7:::
    operator:*:17110:0:99999:7:::
    games:*:17110:0:99999:7:::
    ftp:*:17110:0:99999:7:::
    nobody:*:17110:0:99999:7:::
    named:!!:18178::::::
    [root@localhost opt]# awk -F ":" '$7~"/bash"{print $1}' /etc/passwd
    root                               //          7       /bash      1     
    sun
    [root@localhost opt]# awk '($1~"nfs")&&(NF==8){print $1,$2}' /etc/services 
    nfs 2049/tcp                          //     8       1        nfs      1、2    
    nfs 2049/udp
    nfs 2049/sctp
    netconfsoaphttp 832/tcp
    netconfsoaphttp 832/udp
    netconfsoapbeep 833/tcp
    netconfsoapbeep 833/udp
    [root@localhost opt]# awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
    sync:x:5:0:sync:/sbin:/bin/sync         //    7       /bin/bash    /sbin/nologin      
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt

    3) 파이프, 따옴표 로 셸 명령 호출
    [root@localhost opt]# awk -F : '/bash/{print | "wc -l"}' /etc/passwd
    2                    //  wc -l       bash      ,    grep -c "bash$" /etc/passwd
    [root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}}'
    1     //  w   ,          ,  while    w       ,getline      ,n-2      
    [root@localhost opt]# awk 'BEGIN { "hostname" | getline ; print $0}'  
    localhost.localdomain           //  hostname,         

    좋은 웹페이지 즐겨찾기