Profile picture

[Linux] sed 명령어

JaehyoJJAng2023년 06월 03일

SED

  • Streamlined Editor의 약자
  • 명령행에서 파일을 인자로 받아 명령어를 통해 작업한 후 결과를 화면으로 확인하는 방식
  • sed 편집기는 쉘 리다이렉션을 이용해 편집 결과를 저장하기 전까지는 파일에 아무런 변경도 가하지 않음
  • 명령 수행 후 출력 결과가 원본과 다르더라도 원본에 손해가 없음

옵션

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

subcommand

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

자주 쓰는 치환 플래그

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

사용 예시

'#'로 시작하는 행 삭제

$ sed '/^#/d' sample.txt

빈 행 삭제

$ sed '/^$/d' sample.txt

첫 번째로 나타난 'DC' 문자를 Docker-Compose로 치환 후 원본 파일에 저장

$ sed -e 's/DC/Docker-Compose/3' sample.txt | tee sample.txt

모든 'DC' 문자를 'Docker-Compose'로 치환 후 원본 파일에 저장

$ sed -e 's/DC/Docker-Compose/g' sample.txt | tee sample.txt

대소문자 구분하지 않고 모든 'DC' 문자를 'Docker-Compose'로 치환 후 원본 파일에 저장

$ sed -e 's/DC/Docker-Compose/gi' sample.txt | tee sample.txt

탭을 스페이스로 변환

$ sed -e 's/<tab>/<space>/g' ./sample.txt

파일의 마지막에 내용 추가하고 기존 내용(원본) 덮어쓰기

$ sed -i '$a추가할내용' ./sample.txt

Loading script...