[셸] 셸 스 크 립 트 실전 - sed 스 트림 편집기

글 목록
  • sed 의 소개
  • sed 의 집행 과정
  • sed 의 용법
  • sed 상용 옵션
  • 실전 사례
  • 1. passwd 의 루트 를 zmgaosh
  • 로 교체 합 니 다.
  • 2. 줄 별로 찾기
  • 1) 단행 교체:
  • 2) 다 중 줄 교체:
  • 3) 2 - 4 줄 내용 삭제
  • 4) 줄 추가
  • 5) 파일 마지막 에 추가 내용
  • 6) 파일 의 두 번 째 줄 뒤에 추가 내용
  • 7) 원본 파일 수정 - i
  • 총화
  • sed 소개
    sed 는 Linux 의 다음 기능 이 강 한 비 상호작용 스 트림 텍스트 편집기 로 텍스트 파일 을 증가, 삭제, 수정, 검사 등 작업 을 할 수 있 습 니 다. 줄, 필드, 정규 에 따라 텍스트 내용 과 일치 하 는 것 을 지원 하고 유연성 이 있 으 며 편리 하 며 특히 큰 파일 의 편집 에 적합 합 니 다.
    sed 는 정규 표현 식 을 지원 합 니 다. 정규 표현 식 을 확장 하려 면 - r 인 자 를 추가 해 야 합 니 다.
    sed 의 실행 과정
  • 한 줄 의 데 이 터 를 한 번 에 읽 기
  • 우리 가 제공 하 는 규칙 에 따라 관련 데 이 터 를 일치 시 킵 니 다. 예 를 들 어 루트 를 찾 습 니 다.
  • 명령 에 따라 데이터 흐름 의 데 이 터 를 수정 합 니 다. 예 를 들 어 교체
  • 결 과 를 출력
  • 위 4 단계 반복
  • sed 의 용법
    sed 를 호출 하 는 방법 은 두 가지 가 있 습 니 다.
  • 명령 행 에서 sed 명령 을 지정 하여 텍스트 를 처리 합 니 다 sed + 옵션 "명령"파일
  • 먼저 sed 명령 을 파일 에 저장 하고 이 파일 을 매개 변수 로 호출 합 니 다: sed + 옵션 - f sed 명령 을 포함 한 파일 파일
  • sed 상용 옵션
    options:
    매개 변수
    속뜻
    -a
    현재 줄 아래 에 파일 삽입
    -n
    다음 입력 줄 을 읽 고 첫 번 째 명령 대신 다음 명령 으로 새 줄 을 처리 합 니 다.
    -e
    여러 sed 명령 실행
    -f
    스 크 립 트 실행
    -i
    파일 내용 편집 * *
    -i.bak
    편집 과 동시에. bak 백업 만 들 기
    -r
    확 장 된 정규 표현 식 사용 하기
    명령 하 다.
    매개 변수
    속뜻
    i
    현재 줄 에 파일 삽입
    c
    선택 한 줄 을 새 지정 한 텍스트 로 변경 합 니 다.
    p
    인쇄 * *
    d
    삭제 * * *
    r/R
    파일/줄 읽 기
    w
    따로 저금 하 다
    s
    찾다
    y
    바꾸다
    h
    템 플 릿 블록의 내용 을 메모리 의 버퍼 에 복사 합 니 다.
    H
    메모리 의 버퍼 에 모듈 의 내용 을 추가 합 니 다.
    g
    메모리 버퍼 의 내용 을 가 져 오고 현재 템 플 릿 블록의 텍스트 를 대체 합 니 다.
    G
    메모리 버퍼 의 내용 을 가 져 와 현재 템 플 릿 블록 텍스트 뒤에 추가 합 니 다.
    D
    이전 내용 삭제
    P
    이전 내용 인쇄
    태그 바 꾸 기:
    매개 변수
    속뜻
    숫자.
    새 텍스트 가 몇 번 째 모드 와 일치 하 는 곳 을 바 꿀 것 임 을 표시 합 니 다.
    g
    새 텍스트 가 일치 하 는 모든 텍스트 를 바 꿀 것 임 을 표시 합 니 다.
    \1
    하위 문자열 일치 태그 입 니 다. 앞에서 검색 하면 메타 문자 집합 (...) 을 사용 할 수 있 습 니 다.
    &
    다른 문 자 를 바 꾸 기 위해 서 검색 한 문 자 를 저장 합 니 다.
    일치 문자 집합
    매개 변수
    속뜻
    ^
    일치 하 는 줄 을 시작 합 니 다. 예 를 들 어:/^ sed/sed 로 시작 하 는 모든 줄 과 일치 합 니 다.
    $
    일치 하 는 줄 이 끝 났 습 니 다. 예 를 들 어:/sed $/sed 로 끝 나 는 모든 줄 과 일치 합 니 다.
    .
    /s. d/s 와 일치 한 다음 임의의 문 자 를 연결 합 니 다. 마지막 으로 d 입 니 다.
    *
    0 개 이상 의 문자 와 일치 합 니 다. 예 를 들 어/* sed/모든 템 플 릿 과 일치 하 는 것 은 하나 이상 의 빈 칸 뒤에 sed 줄 을 따라 갑 니 다.
    실전 사례
    1. passwd 의 루트 를 zmgaosh 로 바 꿉 니 다.
    [root@zmedu-17 ~]# cp /etc/passwd passwd
    [root@zmedu-17 ~]# sed 's/root/zmgaosh/g' passwd
    zmgaosh:x:0:0:zmgaosh:/zmgaosh:/bin/bash
    
    

    설명: 's/root/zmgaosh/' 한 줄 의 첫 번 째 루트 만 바 꿉 니 다.
    s/root/zmgaosh/g 이 줄 의 모든 루트 를 교체 합 니 다.
    2. 줄 찾기 로 바 꾸 기
  • 줄 의 범 위 를 숫자 로 표시 합 니 다. $행 미 를 나타 낸다
  • 텍스트 모드 설정 으로 필터 링
  • 1) 단행 교체:
    [root@zmedu-17 ~]# sed '2s/bin/zmgaosh/' passwd |head -n 2
    root:x:0:0:root:/root:/bin/bash
    zmgaosh:x:1:1:bin:/bin:/sbin/nologin
    

    2) 여러 줄 바 꾸 기:
    [root@zmedu-17 ~]# sed '2,5s/bin/zmgaosh/' passwd |head -n 7
    root:x:0:0:root:/root:/bin/bash
    zmgaosh:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/szmgaosh:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/szmgaosh/nologin
    lp:x:4:7:lp:/var/spool/lpd:/szmgaosh/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    
    

    3) 2 - 4 줄 삭제
    [root@zmedu-17 ~]# sed '2,4d' passwd |head -n 5
    root:x:0:0:root:/root:/bin/bash
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    

    4) 줄 추가
    [root@zmedu- 17 ~]\# echo "hello zmgaosh"| sed "i\\나 는 앞 에 있어"나 는 앞 에 있어 hello zmgaosh
    설명:
  • 명령 i (insert 삽입), 현재 줄 앞 에 i\\
  • 을 삽입 합 니 다.
  • 명령 a (append 추가), 현재 줄 뒤에 a\\
  • 를 추가 합 니 다.
    [root@zmedu-17 ~]# echo "hello zmgaosh" |sed 'a\    '
    hello zmgaosh
        
    

    5) 문서 마지막 에 내용 추가
    [root@zmedu-17 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    [root@zmedu-17 ~]# sed '$a\192.168.1.17 zmedu-17' /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.1.17 zmedu-17
    
    

    주의해 야 할 것 은 이렇게 추가 하면 파일 내용 이 바 뀌 지 않 았 다 는 것 이다.
    6) 파일 의 두 번 째 줄 뒤에 내용 추가
    [root@zmedu-17 ~]# cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    [root@zmedu-17 ~]# sed '2a\192.168.1.16 zmedu-16' /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.1.16 zmedu-16
    

    7) 원본 파일 수정 - i
    [root@zmedu-17 ~]# head -1 passwd
    root:x:0:0:root:/root:/bin/bash
    [root@zmedu-17 ~]# sed -i 's/root/zmgaosh/' passwd |head -1 passwd
    zmgaosh:x:0:0:root:/root:/bin/bash
    

    총결산
    모든 공구 꾸러미 에는 대량의 매개 변수 가 있 는데 기억 할 수 있 는 것 은 기억 하고 기억 하지 못 하 는 것 은 수첩 을 찾 는 것 이다. 물론 연습 을 많이 하 는 목적 은 바로 기억 하 는 것 이다.

    좋은 웹페이지 즐겨찾기