【 Shell 】 Shell 프로 그래 밍 의 sed 명령
11090 단어 리 눅 스 시리즈--- [셸 프로 그래 밍]
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