Sed cheet sheet

KDH·2022년 9월 5일
0

sed 란?

Stream Editor의 약자로 원본 텍스트 파일을 편집하는 프로그램.
원본을 변경을 안하기 때문에 안전하게 사용할 수 있다는 장점이 있다. (-i 옵션으로 원본에 반영도 됨)
줄 단위로 수행을 한다.

sed 구조

  • 두 개의 버퍼로 이루어져 stream을 변경한다.
    • 패턴 버퍼 & 홀드 버퍼
  • 한 줄을 읽어서 패턴 버퍼에 담고, 변현과 추가를 하기위해서 홀드 버퍼에 담고, 변경이 완료되면 패턴 버퍼에 다시 담김
  • OutStream 으로 결과 출력이 됨

sed 옵션 및 예제

  • sed_exam.txt
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만 출력한다.
  1. 첫번째 줄만 출력
    sed -n '1p' sed_exam.txt
  2. 1~3 번째 줄만 출력
    sed -n '1,3p' sed_exam.txt
  3. 8~끝 라인 출력
    sed -n '8,$p' sed_exam.txt
    (p 는 print의 약자)
  • -e 옵션 : 여러개를 복수로 작업할 경우
  1. 헤더를 포함해서 8~끝 라인 출력
    sed -n -e '1p' -e '8,$p' sed_exam.txt
  • 파일에서 공백으로 이루어지거나 빈줄 제거하기
  1. 빈 라인 지운 후 내용 출력
    sed '^$/d' sed_exam.txt
  2. 빈 라인 지운 후 new_file로 저장
    sed '^$/d' sed_exam.txt > new_file
  3. 빈 라인 또는 공백으로 채운 라인 제거 후 new_file 로 저장
    sed '^$ *$/d' sed_exam.txt > new_file
  • 단어 치환
  1. sed 's/IT_PROG/DEVELOPER/g' sed_exam.txt 
  • g 플래그로 행 전체를 대상으로 변경
  1. 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]qsed를 종료한다.
[1addr]r file파일로부터 행을 읽어온다.
[2addr]!function선택된 행을 제외한 전체 행에 명령을 적용한다.
[2addr]s문자열을 치환한다.
  • s와 같이 쓰이는 치환 플래그
s와 쓰이는 플래그의미
g치환이 행 전체에 대해 이뤄진다.
p행을 출력한다.
w파일에 쓴다.
x홀드 버퍼와 패턴 스페이스의 내용을 서로 맞바꾼다.
y한 문자를 다른문자로 반환다. (y에 정규표현식 메타문자를 사용할 수 없다.)

참고

0개의 댓글