sed 와 awk 입문 (1)

4310 단어
기본 정규 표현 식 문자
  • ^ word 에서 찾 으 려 는 문자열 이 줄 앞 에 있 습 니 다
  • 워드 $찾 을 문자열 이 줄 끝 에 있 습 니 다
  • . 임의의 문자 가 있 음 을 나타 내 는 문자
  • \ \ 전의 문자
  • * 0 개 에서 무한 개 까지 의 이전 문자 반복
  • [list] 문자 집합 RE 문자 에서 선택 하고 싶 은 문 자 를 찾 습 니 다
  • [n1 - n2] 문자 집합 RE 문자 에서 선택 하고 자 하 는 문자 범위 찾기
  • [^ list] 문자 집합 RE 문자 에서 선택 하지 않 은 문자 나 범 위 를 찾 습 니 다
  • [n, m] n 에서 m 까지 의 이전 RE 문자
  • + 하나 이상 의 이전 RE 문자 반복
  • ? 0 개 또는 1 개의 이전 RE 문자
  • | 여러 문자열 을 사용 하거나 찾 습 니 다
  • () '그룹' 문자열 찾기
  • () + 여러 중복 그룹의 판별
  • 정규 표현 식 의 특수 문 자 는 일반 명령 행 입력 명령 의 마스크 와 같 지 않 습 니 다.
    sed
    sed 자 체 는 파이프 명령 으로 standard input 를 분석 할 수 있 으 며 sed 는 데 이 터 를 교체, 삭제, 추가, 특정 줄 선택 등 기능 sed [- nefr] [동작] - n 조용 한 모드 를 사용 할 수 있 습 니 다. 일반 sed 용법 에서 stdin 에서 온 모든 데 이 터 는 화면 에 표시 되 지만 n 인 자 를 추가 하면...sed 특수 처 리 를 거 쳐 야만 열 거 됩 니 다. - e 명령 행 모드 에서 sed 를 직접 하 는 동작 편집 - f 는 sed 의 동작 을 한 파일 에 직접 쓰 고 - f filename 은 filename 의 sed 동작 - r sed 를 수행 할 수 있 습 니 다. 확장 문법 (기본 정규 표현 식) - i 는 화면 출력 이 아 닌 읽 은 파일 내용 을 직접 수정 합 니 다.
    동작 설명: [n1 [, n2] function n1, n2 가 반드시 존재 하 는 것 은 아 닙 니 다. 일반적으로 동작 을 하 는 줄 수 를 선택 합 니 다.
    function 에는 다음 과 같은 인자 가 있 습 니 다. a 가 추가 되 었 습 니 다. a 의 뒤 에는 문자열 을 연결 할 수 있 습 니 다. 이 문자열 들 은 새로운 줄 에 c 교체 가 나타 납 니 다. c 의 뒤 에는 문자열 을 연결 할 수 있 습 니 다. 이 문자열 들 은 n1, n2 사이 의 줄 d 를 교체 하여 삭제 할 수 있 습 니 다. 뒤 에는 인자 i 삽입 이 필요 없습니다. i 의 뒤 에는 문자열 p 를 연결 하여 인쇄 할 수 있 습 니 다. 선택 한 데 이 터 를 s 로 인쇄 할 수 있 습 니 다.직접 바 꿀 수 있 는 작업 입 니 다. 보통 s 동작 은 정규 표현 식 과 어 울 릴 수 있 습 니 다.
    행동 단위 의 추가 / 삭제 기능nl /etc/passwd | sed '2,25d'
         1  root:x:0:0:root:/root:/bin/bash
        26  tomcat:x:999:998::/home/tomcat:
    
    nl /etc/passwd | sed '2a drink tea'
         1  root:x:0:0:root:/root:/bin/bash
         2  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
    drink tea
         3  bin:x:2:2:bin:/bin:/usr/sbin/nologin
         4  sys:x:3:3:sys:/dev:/usr/sbin/nologin
         5  sync:x:4:65534:sync:/bin:/bin/sync
         ( ...)
    

    행동 단위 의 교체 및 표시 기능nl /etc/passwd | sed '2,5c new line'
         1  root:x:0:0:root:/root:/bin/bash
    new line
         6  games:x:5:60:games:/usr/games:/usr/sbin/nologin
         7  man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
         ( ...)
    

    sed 's / 바 꿀 내용 / 새로운 문자열 / g' cat /etc/man.config | grep 'MAN' | sed 's/#.*$//g' | sed '/^$/d'/ etc / man. config 에 MAN 이 존재 하 는 줄 을 선별 하고 시작 이 \ # 인 줄 을 삭제 합 니 다.
    파일 내용 직접 수정sed -i '$a # this is a new line' regular_express.txt $가 마지막 줄 을 대표 하기 때문에 a 의 동작 은 새로 추 가 됩 니 다. 따라서 이 파일 의 마지막 줄 이 새로 추 가 됩 니 다.
    awk
    sed 는 한 줄 의 처리 에 자주 사용 되 는 것 에 비해 awk 는 한 줄 을 여러 개의 '총알' 로 나 누 어 awk '조건 유형 1 {동작 1} 조건 유형 2 {동작 2}...' filename
    예시
    [dmtsai@study ~]$ last -n 5  <==      
    dmtsai pts/0 192.168.1.100 Tue Jul 14 17:32 still logged in
    dmtsai pts/0 192.168.1.100 Thu Jul 9 23:36 - 02:58 (03:22)
    dmtsai pts/0 192.168.1.100 Thu Jul 9 17:23 - 23:36 (06:12)
    dmtsai pts/0 192.168.1.100 Thu Jul 9 08:02 - 08:17 (00:14)
    dmtsai tty1 Fri May 29 11:55 - 12:11 (00:15)
    

    첫 번 째 열 과 세 번 째 열의 데 이 터 를 얻 으 려 면:
    [dmtsai@study ~]$ last -n 5 | awk '{print $1 "\t" $3}'
    dmtsai 192.168.1.100
    dmtsai 192.168.1.100
    dmtsai 192.168.1.100
    dmtsai 192.168.1.100
    dmtsai Fri
    

    awk 는 줄 의 마지막 처리 단위 이 고 필드 를 최소 처리 단위 로 합 니 다. 내 장 된 변 수 를 통 해 처리 할 수 있 는 것 은 몇 번 째 줄 의 몇 번 째 열 NF 줄 마다 있 는 필드 총수 NR 가 현재 처리 하고 있 는 몇 번 째 줄 의 데이터 FS 현재 분할 문자 입 니 다.
    예시:
    Name 1st 2nd 3th
    VBird 23000 24000 25000
    DMTsai 21000 20000 23000
    Bird2 43000 42000 41000
    

    어떻게 나 를 도와 모든 사람의 총액 을 계산 합 니까?그리고 출력 을 포맷 하고 싶 습 니 다!우 리 는 이렇게 고려 할 수 있다.
    첫 번 째 줄 은 설명 일 뿐 이 므 로 첫 번 째 줄 은 더하기 (NR = = 1 시 처리) 를 하지 마 십시오.두 번 째 줄 이후 에 총 을 더 한 상황 이 발생 합 니 다 (NR > = 2 이후 처리)
    cat pay.txt | \ 
    > awk 'NR==1{printf "%10s %10s %10s %10s %10s
    ",$1,$2,$3,$4,"Total" } > NR>=2{total = $2 + $3 + $4 > printf "%10s %10d %10d %10d %10.2f
    ", $1, $2, $3, $4, total}' Name 1st 2nd 3th Total VBird 23000 24000 25000 72000.00 DMTsai 21000 20000 23000 64000.00 Bird2 43000 42000 41000 126000.00

    좋은 웹페이지 즐겨찾기