Linux Shell 스 크 립 트 프로 그래 밍 - sed 명령 상세 설명

17865 단어 Linux shell
간단 한 소개
sed 는 한 줄 의 내용 을 처리 하 는 온라인 편집기 입 니 다.처리 할 때 현재 처 리 된 줄 을 임시 버퍼 에 저장 하여 '패턴 공간' (pattern space) 이 라 고 부 릅 니 다. 이 어 sed 명령 으로 버퍼 의 내용 을 처리 하고 처리 가 완료 되면 버퍼 의 내용 을 화면 으로 보 냅 니 다.이 어 다음 줄 을 처리 하고 파일 이 끝 날 때 까지 반복 합 니 다.파일 내용 은 변경 되 지 않 았 습 니 다. 리 셋 저장 소 출력 을 사용 하지 않 는 한.Sed 는 주로 하나 이상 의 파일 을 자동 으로 편집 하 는 데 사 용 됩 니 다.파일 에 대한 반복 작업 간소화;변환 프로그램 작성 등.
 
sed 사용 매개 변수
 
[root@www ~]# sed [-nefr] [  ]

     :

-n :    (silent)  。    sed     ,     STDIN               。      -n    ,     sed         (    )      。

-e :            sed-f :    sed           , -f filename       filename    sed-r :sed                   。(            )

-i :           ,        。



    : [n1[,n2]]function

n1, n2 :      ,    『         』,    ,           10   20       , 『 10,20[    ] 』



functiona :  , a         ,             (      )~

c :  , c         ,         n1,n2     !

d :  ,      ,   d           ;

i :  , i         ,             (      );

p :     。   p      sed -n     ~

s :  ,            !     s             !   1,20s/old/new/g   。

행동 단위 의 추가/삭제
/etc/passwd 의 내용 을 열거 하고 줄 번 호 를 인쇄 하 는 동시에 2 ~ 5 줄 을 삭제 하 십시오!
[root@www ~]# nl /etc/passwd | sed '2,5d'

1 root:x:0:0:root:/root:/bin/bash

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

.....(    ).....

sed 의 동작 은 '2, 5d' 입 니 다. 그 d 는 삭제 입 니 다!2 - 5 줄 이 삭제 되 었 기 때문에 표 시 된 데 이 터 는 2 - 5 줄 이 없습니다 ~ 그리고 주의 하 세 요. 원래 sed - e 를 내 려 야 하 는데 - e 가 없어 도 됩 니 다!또한 주의해 야 할 것 은 sed 뒤에 연결 하 는 동작 입 니 다. 반드시 '두 개의 작은 따옴표 로 묶 으 세 요!
두 번 째 줄 만 삭제 하면
nl /etc/passwd | sed '2d' 

 
3 번 부터 마지막 줄 까지 삭제 해 야 합 니 다.
 nl /etc/passwd | sed '3,$d' 

 
두 번 째 줄 뒤에 (즉 세 번 째 줄 에 추가) 'drink tea?' 라 는 글 자 를 붙 여 라!
[root@www ~]# nl /etc/passwd | sed '2a drink tea'

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

drink tea

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

.....(    ).....

 
그럼 두 번 째 줄 앞에서
 nl /etc/passwd | sed '2i drink tea' 

 
두 줄 이상 늘 리 려 면 두 번 째 줄 뒤에 두 줄 을 넣 으 세 요. 예 를 들 어 'Drink tea or...' 와 'drink beer?'
 
[root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\

> drink beer ?'

1 root:x:0:0:root:/root:/bin/bash

2 bin:x:1:1:bin:/bin:/sbin/nologin

Drink tea or ......

drink beer ?

3 daemon:x:2:2:daemon:/sbin:/sbin/nologin

.....(    ).....

 
줄 마다 "\"역 슬 래 쉬 줄 로 새 줄 을 추가 해 야 합 니 다!그래서 위의 예 에서 우 리 는 첫 줄 의 맨 뒤에\가 존재 한 다 는 것 을 발견 할 수 있다.
행동 단위 의 교체 와 표시
2 - 5 줄 의 내용 을 'No 2 - 5 number' 로 대체 할 까요?
[root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'

1 root:x:0:0:root:/root:/bin/bash

No 2-5 number

6 sync:x:5:0:sync:/sbin:/bin/sync

.....(    ).....

이 방법 을 통 해 우 리 는 데 이 터 를 줄 전체 로 대체 할 수 있다!
 
/etc/passwd 파일 의 5 - 7 줄 만 표시 합 니 다.
[root@www ~]# nl /etc/passwd | sed -n '5,7p'

5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

6 sync:x:5:0:sync:/sbin:/bin/sync

7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

이 sed 의 행동 단위 표시 기능 을 통 해 특정한 파일 안의 줄 번 호 를 선택 하여 표시 할 수 있 습 니 다.
 
데이터 검색 및 표시
루트 키워드 가 있 는 줄 검색/etc/passwd
 
nl /etc/passwd | sed '/root/p'

1  root:x:0:0:root:/root:/bin/bash

1  root:x:0:0:root:/root:/bin/bash

2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

3  bin:x:2:2:bin:/bin:/bin/sh

4  sys:x:3:3:sys:/dev:/bin/sh

5  sync:x:4:65534:sync:/bin:/bin/sync

....     

 
루트 를 찾 으 면 모든 줄 을 출력 하 는 것 외 에 일치 하 는 줄 을 출력 합 니 다.
 
- n 을 사용 할 때 템 플 릿 을 포함 하 는 줄 만 인쇄 합 니 다.
nl /etc/passwd | sed -n '/root/p'

1  root:x:0:0:root:/root:/bin/bash

 
데이터 검색 및 삭제
루트 를 포함 하 는 모든 줄, 다른 줄 출력 삭제/etc/passwd
nl /etc/passwd | sed  '/root/d'

2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

3  bin:x:2:2:bin:/bin:/bin/sh

....    

#      root     

 
 
 
데이터 검색 및 실행 명령
일치 하 는 모드 eastern 줄 을 찾 으 면,
/etc/passwd 를 검색 하여 루트 에 대응 하 는 줄 을 찾 습 니 다. 뒤에 있 는 괄호 에 있 는 명령 을 실행 하고 명령 마다 분점 으로 구분 합 니 다. 여기 서 bash 를 blueshell 로 바 꾸 고 이 줄 을 출력 합 니 다.
 nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'

 1  root:x:0:0:root:/root:/bin/blueshell


/etc/passwd 의 첫 번 째 bash 키워드 만 blueshell 로 바 꾸 면 종료 합 니 다.
nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    

1  root:x:0:0:root:/root:/bin/blueshell

마지막 q 는 종료 입 니 다.
 
데이터 검색 및 교체
전체 줄 의 처리 모델 을 제외 하고 sed 는 행위 단위 로 일부 데 이 터 를 검색 하고 대체 할 수 있다.기본적으로 sed 의 검색 은 vi 와 비슷 합 니 다!그 는 약간 이렇다.
sed 's/       /    /g'

 
먼저 원본 정 보 를 관찰 하고/sbin/ifconfig 를 이용 하여 IP 조회
[root@www ~]# /sbin/ifconfig eth0

eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84

inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

.....(    ).....

이 컴퓨터 의 ip 은 192.168.100 입 니 다.
 
IP 앞부분 삭제
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'

192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0

다음은 후속 부분 을 삭제 하 는 것 입 니 다. 즉,: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
IP 뒷부분 삭제
[root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'

192.168.1.100

 
다 중 편집
sed 명령 으로/etc/passwd 세 번 째 줄 에서 끝까지 데 이 터 를 삭제 하고 bash 를 blueshell 로 대체 합 니 다.
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

1  root:x:0:0:root:/root:/bin/blueshell

2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

- e 는 다 중 편집 을 표시 합 니 다. 첫 번 째 편집 명령 은/etc/passwd 세 번 째 줄 에서 끝까지 의 데 이 터 를 삭제 하고 두 번 째 명령 은 bash 를 검색 하여 blueshell 로 대체 합 니 다.
 
파일 내용 직접 수정 (위험 동작)
sed 는 파일 의 내용 을 직접 수정 할 수 있 습 니 다. 파이프 명령 이나 데이터 흐름 을 사용 하지 않 아 도 됩 니 다!그러나 이 동작 은 원본 파일 로 직접 수정 되 기 때문에 시스템 설정 을 가지 고 테스트 하지 마 세 요!우 리 는 다운로드 한 regular 를 사용 합 니 다.express. txt 파일 테스트 해 보 세 요!
sed 를 이용 하여 regularexpress. txt 내 모든 줄 의 끝 이.. 이면 바 꿉 니 다!
[root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt

 
sed 를 이용 하여 regularexpress. txt 마지막 줄 에 "\# This is a test"를 추가 합 니 다.
[root@www ~]# sed -i '$a # This is a test' regular_express.txt

$는 마지막 줄 을 대표 하고 a 의 동작 은 새로 추 가 됩 니 다. 따라서 이 파일 은 마지막 으로 "\# This is a test"를 추가 합 니 다!
sed 의 "- i"옵션 은 파일 내용 을 직접 수정 할 수 있 습 니 다. 이 기능 은 매우 도움 이 됩 니 다!예 를 들 어 100 만 줄 의 파일 이 있다 면 100 줄 에 어떤 문 자 를 추가 해 야 합 니 다. 이때 vim 을 사용 하면 미 칠 수 있 습 니 다!서류 가 너무 커서!그럼 어 떡 하지?sed 를 이용 하 라 고!sed 를 통 해 직접 수정/대체 하 는 기능 을 통 해 vim 로 수정 할 필요 가 없습니다!

좋은 웹페이지 즐겨찾기