【 Shell 】 Shell 프로 그래 밍 의 sed 명령

sed 소개
sed 편집 기 는 스 트림 편집기 라 고 합 니 다.입력 흐름 (파일 또는 파이프 입력) 에서 기본 텍스트 변환 에 사 용 됩 니 다.처리 할 때 현재 처 리 된 줄 을 임시 버퍼 에 저장 하여 '패턴 공간' (pattern space) 이 라 고 부 릅 니 다. 이 어 sed 명령 으로 버퍼 의 내용 을 처리 하고 처리 가 완료 되면 버퍼 의 내용 을 화면 으로 보 내 고 다음 줄 을 처리 하 며 파일 이 끝 날 때 까지 계속 반복 합 니 다.파일 내용 은 변 하지 않 았 습 니 다. 리 셋 저장 소 출력 을 사용 하지 않 는 한 sed 는 하나 이상 의 파일 을 자동 으로 편집 하고 파일 에 대한 반복 작업 을 간소화 하 며 변환 프로그램 을 작성 하 는 것 을 사랑 합 니 다.
sed 명령 행 옵션
sed 명령 전체 형식:
sed OPTIONS ... [SCRIPT] [INPUTFILE...]
명령 행 옵션 은 다음 과 같 습 니 다.
-- version: 버 전 정보 표시;
- n -- quiet -- silent: 스 크 립 트 처리 후의 결과 만 인쇄 합 니 다.
- e -- expression = script: 입력 한 파일 을 옵션 에서 지정 한 script 으로 처리 합 니 다.
- f script - file 또는 -- file = script - file: 입력 한 파일 을 옵션 으로 처리 합 니 다.
- i [SUFFIX] 또는 -- in - place [= SUFFIX]: 문서 에서 읽 은 내용 을 직접 수정 하여 화면 에 출력 하지 않 습 니 다.
- r 또는 -- regexp - extended: sed 는 확장 정규 를 사용 합 니 다.
sed 종료 상태
종료 상태 가 0 이면 성공 을 표시 하고 0 이 아니면 실 패 를 표시 합 니 다.
0: 성공 완성;
1: 잘못된 명령, 잘못된 문법 또는 잘못된 정규 표현 식;
2: 명령 행 에서 지정 한 파일 을 열 수 없습니다 (예 를 들 어 파일 을 찾 을 수 없 거나 권한 이 없 음). 다른 파일 을 계속 처리 합 니 다.
4: I/O 오류 나 실행 중 심각 한 처리 오류;
sed 메타 문자 집합
^: 일치 하 는 줄 을 시작 합 니 다. 예 를 들 어:/^ sed/sed 로 시작 하 는 모든 줄 과 일치 합 니 다.
$: 일치 하 는 줄 이 끝 납 니 다. 예 를 들 어:/sed $/sed 로 끝 나 는 모든 줄 과 일치 합 니 다.
.: 줄 바 꿈 이 아 닌 임의의 문자 와 일치 합 니 다. 예 를 들 어:/s. d/s 와 일치 한 후 임의의 문 자 를 연결 합 니 다. 마지막 으로 d 입 니 다.
*: 0 개 이상 의 문자 와 일치 합 니 다. 예 를 들 어/* sed/모든 템 플 릿 과 일치 하 는 것 은 하나 이상 의 빈 칸 뒤에 sed 줄 을 따라 갑 니 다.
[]: 지정 한 범위 내의 문자 와 일치 합 니 다. 예 를 들 어/[ss] ed/sed 와 Sed 가 일치 합 니 다. 
[^]: 지정 한 범위 에 있 지 않 은 문자 와 일치 합 니 다. 예 를 들 어:/[^ A - RT - Z] ed/A - R 과 T - Z 가 포함 되 지 않 은 알파벳 의 시작 과 일치 합 니 다. ed 의 줄 을 따라 갑 니 다.
\(..\): 짝 짓 기 문자열 을 저장 합 니 다. 예 를 들 어 s/\(love\) able/\1rs, loveable 은 lovers 로 대 체 됩 니 다.
&: 검색 문 자 를 저장 하여 다른 문 자 를 대체 합 니 다. 예 를 들 어 s/love/* & */, love 는 * * love * * 가 됩 니 다.
\
\>: 단어 와 일치 하 는 끝, 예 를 들 어/love\>/love 로 끝 나 는 단 어 를 포함 하 는 줄 과 일치 합 니 다.
x\{m\}: 반복 문자 x, m 회, 예 를 들 어/0\{5\\}/5 개의 0 을 포함 하 는 줄 과 일치 합 니 다.
x\{m,\}: 반복 문자 x, 최소 m 회, 예 를 들 어/0\{5,\}/일치 하 는 최소 5 개의 0 줄;
x\{m, n\}: 반복 문자 x, 최소 m 회, n 회 이상, 예 를 들 어/0\{5, 10\}/5 ~ 10 개의 0 줄 과 일치 합 니 다.
sed 명령
man sed 를 통 해 이 명령 의 상세 한 매개 변수 정 보 를 볼 수 있 습 니 다:
[root@strong sed_stu]# man sed

sed 명령 데모
테스트 데이터
[root@strong sed_stu]# cat emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
[root@strong sed_stu]# 

1. 인쇄: p 명령
--       
[root@strong sed_stu]# sed '1p' emp.txt 
0001  Alen   M  24
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
     ,           ,  -n      ,-n p             :
--     
[root@strong sed_stu]# sed -n '1p' emp.txt 
0001  Alen   M  24
--            
[root@strong sed_stu]# sed -n '3,5p' emp.txt 
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
--    Tim  
[root@strong sed_stu]# sed -n '/Tim/p' emp.txt 
0005  Tim    M  25
--  Tim   Bobo    
[root@strong sed_stu]# sed -n '/Tim/,/Bobo/p' emp.txt 
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32

2, 삭제: d 명령
--     ,     ,           
[root@strong sed_stu]# sed '5d' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--             
[root@strong sed_stu]# sed '3,$d' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
--      Felix Geo  
[root@strong sed_stu]# sed '/Felix/,/Geo/d' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0009  Andy   F  19
00010 Peter  M  28

3, 교체: s 명령
--     2   222
[root@strong sed_stu]# sed 's/2/222/' emp.txt 
0001  Alen   M  2224
000222  Tiboo  M  32
0003  Felix  M  2226
0004  Jack   F  2224
0005  Tim    M  2225
0006  Audi   F  30
0007  Bobo   F  3222
0008  Geo    M  2221
0009  Andy   F  19
00010 Peter  M  2228
--       2,          
[root@strong sed_stu]# sed 's/2/....222/2' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  3....222
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
 :              2   222,         ,    g    ,      。
--     g,                 
[root@strong sed_stu]# sed 's/2/222/g' emp.txt 
0001  Alen   M  2224
000222  Tiboo  M  3222
0003  Felix  M  2226
0004  Jack   F  2224
0005  Tim    M  2225
0006  Audi   F  30
0007  Bobo   F  3222
0008  Geo    M  2221
0009  Andy   F  19
00010 Peter  M  2228
---    p,          
[root@strong sed_stu]# sed -n 's/2/222/gp' emp.txt 
0001  Alen   M  2224
000222  Tiboo  M  3222
0003  Felix  M  2226
0004  Jack   F  2224
0005  Tim    M  2225
0007  Bobo   F  3222
0008  Geo    M  2221
00010 Peter  M  2228
--     w file,            
[root@strong sed_stu]# sed 's/2/....222/w test.txt' emp.txt 
0001  Alen   M  ....2224
000....222  Tiboo  M  32
0003  Felix  M  ....2226
0004  Jack   F  ....2224
0005  Tim    M  ....2225
0006  Audi   F  30
0007  Bobo   F  3....222
0008  Geo    M  ....2221
0009  Andy   F  19
00010 Peter  M  ....2228
[root@strong sed_stu]# cat test.txt 
0001  Alen   M  ....2224
000....222  Tiboo  M  32
0003  Felix  M  ....2226
0004  Jack   F  ....2224
0005  Tim    M  ....2225
0007  Bobo   F  3....222
0008  Geo    M  ....2221
00010 Peter  M  ....2228
-- Felix Audi       ***HI****
[root@strong sed_stu]# sed '/Felix/,/Audi/s/$/***HI****/' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26***HI****
0004  Jack   F  24***HI****
0005  Tim    M  25***HI****
0006  Audi   F  30***HI****
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

4. 여러 편집기 명령 사용: e 명령
[root@strong sed_stu]# sed -e 's/Alen/ALEN/;/Jack/,/Audi/s/$/****HI****/' emp.txt 
0001  ALEN   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24****HI****
0005  Tim    M  25****HI****
0006  Audi   F  30****HI****
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--      -e
[root@strong sed_stu]# sed -e 's/Alen/ALEN/' -e  '/Jack/,/Audi/s/$/****HI****/' emp.txt 
0001  ALEN   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24****HI****
0005  Tim    M  25****HI****
0006  Audi   F  30****HI****
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--      
[root@strong sed_stu]# sed -e '
> s/Alen/ALEN/
> /Jack/,/Audi/s/$/****HI***/' emp.txt
0001  ALEN   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24****HI***
0005  Tim    M  25****HI***
0006  Audi   F  30****HI***
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

5. 파일 에서 편집기 명령 읽 기
--sed  
[root@strong sed_stu]# cat script.txt 
s/Alen/ALEN/
/Jack/,/Audi/s/$/****HI****/
---f  sed    
[root@strong sed_stu]# sed -f script.txt emp.txt 
0001  ALEN   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24****HI****
0005  Tim    M  25****HI****
0006  Audi   F  30****HI****
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

6. 추가 텍스트: a 명령
--          
[root@strong sed_stu]# sed '3a\This is append test' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
This is append test
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

7. 텍스트 삽입: i 명령
[root@strong sed_stu]# sed '3i\This is inserted line' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
This is inserted line
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

8. 줄 변경: c 명령
--        
[root@strong sed_stu]# sed '3c\This is updated by new line' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
This is updated by new line
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

9. 줄 삭제: d 명령
[root@strong sed_stu]# sed '1,5d' emp.txt 
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

10. 줄 바 꾸 기: y 명령
[root@strong sed_stu]# sed '1,5y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' emp.txt 
0001  ALEN   M  24
0002  TIBOO  M  32
0003  FELIX  M  26
0004  JACK   F  24
0005  TIM    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

11. 다음 줄 가 져 오기: n 명령
--  Jack    ,  ....2222  2
[root@strong sed_stu]# sed '/Jack/{n;s/2/....2222/;} ' emp.txt
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  ....22225
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--    
[root@strong sed_stu]# cat emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26

0004  Jack   F  24
0005  Tim    M  25

0006  Audi   F  30
0007  Bobo   F  32

0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--  Felix      
[root@strong sed_stu]# sed '/Felix/{n;d}' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25

0006  Audi   F  30
0007  Bobo   F  32

0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28
--      
[root@strong sed_stu]# sed '/^$/d' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0003  Felix  M  26
0004  Jack   F  24
0005  Tim    M  25
0006  Audi   F  30
0007  Bobo   F  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

12. 여러 줄 텍스트 조합: N 명령
--                     
[root@strong sed_stu]# sed '/Alen/{N;s/
/ /;}' emp.txt 0001 Alen M 24 0002 Tiboo M 32 0003 Felix M 26 0004 Jack F 24 0005 Tim M 25 0006 Audi F 30 0007 Bobo F 32 0008 Geo M 21 0009 Andy F 19 00010 Peter M 28

13. 부정 명령:!명령 하 다.
--    3  7       
[root@strong sed_stu]# sed -n '3,7!p' emp.txt 
0001  Alen   M  24
0002  Tiboo  M  32
0008  Geo    M  21
0009  Andy   F  19
00010 Peter  M  28

14. 모드 교체
--&            
--        
[root@strong sed_stu]# echo "The cat sleeps in his hat" | sed 's/.at/"&"/g'
The "cat" sleeps in his "hat"
--                   ,         ,             
[root@strong sed_stu]# echo "This is Alen Liu , not Alen Li" | sed 's/\(Alen\) Liu/\1 L/' 
This is Alen L , not Alen Li

좋은 웹페이지 즐겨찾기