sed 란?
Stream Editor의 약자로 원본 텍스트 파일을 편집하는 프로그램.
원본을 변경을 안하기 때문에 안전하게 사용할 수 있다는 장점이 있다. (-i 옵션으로 원본에 반영도 됨)
줄 단위로 수행을 한다.
sed 구조
- 두 개의 버퍼로 이루어져 stream을 변경한다.
- 한 줄을 읽어서 패턴 버퍼에 담고, 변현과 추가를 하기위해서 홀드 버퍼에 담고, 변경이 완료되면 패턴 버퍼에 다시 담김
- OutStream 으로 결과 출력이 됨
sed 옵션 및 예제
EMPLOYEE_ID FIRST_NAME LAST_NAME EMAIL PHONE_NUMBER HIRE_DATE JOB_ID SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
100 Steven King SKING 515.123.4567 03/06/17 AD_PRES 24000 90
101 Neena Kochhar NKOCHHAR 515.123.4568 05/09/21 AD_VP 17000 100 90
102 Lex De Haan LDEHAAN 515.123.4569 01/01/13 AD_VP 17000 100 90
103 Alexander Hunold AHUNOLD 590.423.4567 06/01/03 IT_PROG 9000 102 60
104 Bruce Ernst BERNST 590.423.4568 07/05/21 IT_PROG 6000 103 60
105 David Austin DAUSTIN 590.423.4569 05/06/25 IT_PROG 4800 103 60
106 Valli Pataballa VPATABAL 590.423.4560 06/02/05 IT_PROG 4800 103 60
107 Diana Lorentz DLORENTZ 590.423.5567 07/02/07 IT_PROG 4200 103 60
108 Nancy Greenberg NGREENBE 515.124.4569 02/08/17 FI_MGR 12008 101 100
109 Daniel Faviet DFAVIET 515.124.4169 02/08/16 FI_ACCOUNT 9000 108 100
- -n 옵션 : 작업할 pattern buffer만 출력한다.
- 기본적으로 sed는 pattern buffer를 모두 출력하는데 -n은 작업한 row만 출력한다.
- 첫번째 줄만 출력
sed -n '1p' sed_exam.txt
- 1~3 번째 줄만 출력
sed -n '1,3p' sed_exam.txt
- 8~끝 라인 출력
sed -n '8,$p' sed_exam.txt
(p 는 print의 약자)
- 헤더를 포함해서 8~끝 라인 출력
sed -n -e '1p' -e '8,$p' sed_exam.txt
- 빈 라인 지운 후 내용 출력
sed '^$/d' sed_exam.txt
- 빈 라인 지운 후 new_file로 저장
sed '^$/d' sed_exam.txt > new_file
- 빈 라인 또는 공백으로 채운 라인 제거 후 new_file 로 저장
sed '^$ *$/d' sed_exam.txt > new_file
sed 's/IT_PROG/DEVELOPER/g' sed_exam.txt
sed 's/IT_PROG/DEVELOPER/gi' sed_exam.txt
- i플래그는 변경 대상 단어를 찾을 때 대소문자 무시한다.
sed subcommand 종류
subcommand | 의미 |
---|
[1addr]a\ | 현재 행에 하나 이상의 새로운 행을 추가한다. |
[2addr]c\ | 현재 행의 내용을 새로운 내용으로 교체한다. |
[2addr]d | 행을 삭제한다. |
[1addr]i\ | 현재 행의 위에 텍스트를 삽입한다. |
[2addr]h | 패턴 스페이스의 내용을 홀드 스페이스 복사한다. |
[2addr]H | 패턴 스페이스의 내용을 홀드 스페이스에 추가한다. |
[2addr]g | 홀드 스페이스의 내용을 패턴 스페이스에 복사한다.(패턴 스페이스가 비어있지 않는 경우에는 덮어쓰기) |
[2addr]G | 홀드 스페이스의 내용을 패턴 스페이스에 복사한다.(패턴 스페이스가 비어있지 않는 경우에는 그 뒤에 추가) |
[2addr]l | 출력되지 않는 특수문자를 명확하게 출력한다. |
[2addr]p | 행을 출력한다. |
[2addr]n | 다음 입력 행을 첫번째 명령어가 아닌 다음 명령어에서 처리하게 한다. |
[1addr]q | sed를 종료한다. |
[1addr]r file | 파일로부터 행을 읽어온다. |
[2addr]!function | 선택된 행을 제외한 전체 행에 명령을 적용한다. |
[2addr]s | 문자열을 치환한다. |
s와 쓰이는 플래그 | 의미 |
---|
g | 치환이 행 전체에 대해 이뤄진다. |
p | 행을 출력한다. |
w | 파일에 쓴다. |
x | 홀드 버퍼와 패턴 스페이스의 내용을 서로 맞바꾼다. |
y | 한 문자를 다른문자로 반환다. (y에 정규표현식 메타문자를 사용할 수 없다.) |
참고