본문 바로가기
OS/Linux

[Linux] sed 명령어

by diaryDev 2024. 10. 16.
728x90

sed(Stream Editor)

sed 명령어는 홀드 버퍼(데이터 원본)와 패턴 버퍼(조건에 따라 가공된 데이터 저장)를 가지고 있다.

파일을 횡 단위로 구분하여 하나의 행을 가지고 온 뒤 원본 데이터를 저장하고 조건에 맞는 필터를 거쳐 패턴 버퍼에 저장한다.

 

옵션

option 설명
-e 조건식 스크립트를 직접 지정
-f 조건식 스크립트가 기재된 파일을 지정
-n 패턴이 일치하는 라인만 출력
-r 확장 정규표현을 사용한 스크립트를 사용
-i 수정한 내용으로 파일 덮어쓰기

 

플래그/커맨드

플래그/커맨드 설명
a\ 현재 행에 하나 이상의 새로운 행 추가
c\ 현재 행의 내용을 새로운 내용으로 교체
d 행 삭제
i\ 현재 행의 위에 텍스트 삽입
h 패턴 스페이스의 내용을 홀드 스페이스에 복사
H 패턴 스페이스의 내용을 홀드 스페이스에 추가
g 홀드 스페이스의 내용을 패턴 스페이스에 덮어쓰기
G 홀드 스페이스의 내용을 패턴 스페이스에 추가
l 출력되지 않는 특수문자를 명확하게 출력
p 행 출력
n 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리
q sed 종료
r 파일로부터 행 읽어오기
! 선택된 행을 제외한 나머지 전체 행에 명령어 적용
s 문자열 치환

 

치환 플래그

치환 플래그 설명
g 치환이 행 전체에 대해 이뤄짐
p 행 출력
w 파일에 쓰기
x 홀드 스페이스와 패턴 스페이스의 내용을 서로 맞바꾸기
y 한 문자를 다른 문자로 변환 (정규표현식 메타문자 사용 불가능)

 

사용 예시 1

sed '/[문자열]/d' [파일명] [문자열]이 있는 행 삭제 후 출력
sed '/[문자열]/d' [파일명1] >> [파일명2] [문자열]이 포함된 행 삭제 후, [파일명2]에 저장
sed 's/[문자열1]/ [문자열2]/g' [파일명] 행에서 [문자열1]을 [문자열2]로 수정 후 출력
sed 's/[문자열1]\|[문자열2]/[문자열3]/g' [파일명] [문자열1]과 [문자열2]를 [문자열3]으로 수정 후 출력
sed 's/[문자열1].*[문자열2]/[문자열3]/g' [문자열1] ~ [문자열2] 사이의 내용을 [문자열3]으로 수정 후 출력
 sed 's/\[.*\]//g' [파일명] 대괄호([]) 사이 내용 모두 삭제 후 출력
sed '/^$/d' [파일명] 빈 행 제거
sed '/^[[:space:]]*$/d' [파일명] 공백(space bar)으로 이루어진 빈 행 제거

 

사용 예시 2

sed '[패턴]' [파일명]

 

-n : 특정 행만 출력('' 안에 행의 번호와 p옵션을 붙여 원하는 행만 출력 가능)

-i : 해당 패턴의 출력결과와 동일하게 원본 파일 수정

d : 해당 행 삭제

s : 바꾸고 싶은 행의 번호

 

sed -n '2p' [파일명] 2번 행만 출력
sed -n '2,4p' [파일명] 2~4번행 출력
sed -i -n '2,4p' [파일명] 2~4번 행만 파일에 저장
sed '5d' [파일명] 5번 행 삭제
sed '3,$d' [파일명] 3번부터 끝행까지 모든 행 삭제
sed '2,4s/[문자열1]/[문자열2]/g' [파일명] 2~4번 행 모두 [문자열1]을 [문자열2]으로 변경
sed 's/[문자열1]/[문자열2]/gI' [파일명] 대소문자 구분 없이 [문자열1]을 [문자열2]로 치환
sed 's/\b[문자열1]\b/[문자열2]/g' [파일명] [문자열1]과 완전히 일치하는 부분만 [문자열2]로 치환

 

두 가지 패턴을 동시 적용

sed -e [패턴] [파일명] -e [패턴] [파일명]

sed -n -e '1p' test -e '4p' test test 파일에서 1번과 4번 행 동시 출력

 

 

두 가지 패턴을 순차적으로 적용

 sed -n [패턴] [파일명] | sed -n [패턴]

sed -n '2,4p' test | sed -n '1p' 2~4번 행 출력 후, (2~4번 행 출력된 것에서) 다시 1번 행 출력

 

 


 

 

참고

https://wiseworld.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-sed-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

https://wiseworld.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-sed-%EB%AA%85%EB%A0%B9%EC%96%B4%EC%9D%98-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EC%82%AC%EC%9A%A9%EB%B0%A9%EB%B2%95

https://velog.io/@inhwa1025/Linux-SED-%EB%AA%85%EB%A0%B9%EC%96%B4-%EC%82%AC%EC%9A%A9%EB%B2%95

728x90

'OS > Linux' 카테고리의 다른 글

[Linux] ls 명령어  (0) 2024.10.21
[Linux] awk 명령어  (0) 2024.10.18
[Linux] netstat 명령어  (0) 2024.10.14
[Linux] more 명령어  (0) 2024.10.11
[Linux] ps 명령어  (0) 2024.10.09