sed는 stream editor의 약자로 인풋을 가공해서 출력하는 명령어이다. 전부 메모리에 올리지 않기 때문에 매우 큰 파일을 처리하는데 효율적이다.
알아야 할 개념으로 버퍼 2개가 있다.
스트림을 읽어 처리하는 부분인 pattern space와 처리한 값을 저장하는 hold space이다. 스트림 처리지만 여러 스트림을 받아 처리가 필요한 경우 hold space를 이용한다. 그렇기 때문에 pattern space에서는 다음 스트림을 읽어오거나, hold space로 값을 보내거나 가져오는 등의 함수들이 있다.
치환(Substitute)
$ sed 's/A/B/flag'
A를 B로 바꾸는 명령이다. flag는 비워놔도 문제없고, 자주 사용하는 몇 가지가 있다.
p
: 출력하는데 주로-n
옵션과 같이 써서 명령이 적용된 라인만 출력할 경우에 사용한다.n
: 숫자를 쓰면 n번째 매칭 되는 문자를 바꾼다.g
: 모든 패턴을 검사. 없으면 기본값이 1이라서 첫 번째 매칭 되는 문자만 바꾼다.I
: 대소문자 무시
삭제(Delete)
특정 문자가 포함된 라인 삭제
$ sed '/A/d'
특정 라인도 삭제할 수 있다. 범위 표현은 콤마(,)로 한다.
$ sed '2d' // 2번째 라인 삭제
$ sed '1d; 2d' // 2번째 라인 삭제
$ sed '2,4d' // 2~4번째 라인 삭제
내장 함수
=
: 라인 번호;
: 여러 명령어를 사용할 경우 구분p
: 현재 pattern space를 출력. sed에 의해서도 출력되기 때문에 주로-n
옵션과 같이 사용한다.P
:p
와 같지만 pattern space에서 첫 번째 라인만 출력{...}
: 여러 명령을 한 번에 수행해야 할 경우에 사용하는 그룹n
: 다음 라인을 읽는다. 다음 라인이 없으면 종료된다.N
: 다음 라인을 읽어 newline과 함께 pattern space에 추가한다. 다음 라인이 없으면 종료된다.d
: pattern space를 지운다.D
: pattern space의 첫 번째 라인을 지운다.h
: pattern space를 hold space로 복사한다.H
: hold space에 newline을 더한 후 추가한다.g
: hold space의 내용을 다시 pattern space로 가져온다. 기존 pattern space는 사라진다.G
: 기존 pattern space에 newline을 더한 후 hold space의 내용을 가져온다.
옵션
-n
명령이 적용된 라인만 출력한다. p명령과 함께 써서 적용된 라인을 구분시킨다.$ sed -n 's/A/B/gp'
-e
여러 개의 명령을 이어서 처리한다.-E
(Darwin, BSD),-r
(GNU)
Extended 정규표현식으로 해석한다.
'기타' 카테고리의 다른 글
MySQL DATE INTERVAL 함수 함정 (1) | 2019.12.13 |
---|---|
[bash] 간단한 부하테스트 script (0) | 2019.12.12 |
[bash] awk 사용 설명서 (0) | 2019.11.21 |
삭제된 라인의 git commit 찾기 (0) | 2019.11.20 |
RFC1918과 CIDR 블록 (0) | 2019.10.24 |
댓글