Linux Basic

sed 명령어

별다방체리콕 2024. 1. 25. 13:10

 

 

 

 

 

 

 

sed 란?

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

 

 

 

 

 

 

 

 

 

sed 의 워크스페이스

  • sed 편집기는 동작 시 내부적으로 두 개의 워크스페이스를 사용함

 

 

 

 

 

 

 

 

 

 

 

 

 

패턴 스페이스 (= 패턴 버퍼)

  • sed 가 파일을 라인단위로 읽을 때 읽은 라인이 저장되는 임시 공간
  • sed 명령어를 통해 내용 조작이나 출력을 수행하면 패턴 버퍼의 내용이 사용됨

 

 

 

 

 

 

 

 

 

홀드 스페이스 (= 홀드 버퍼)

  • 패턴 버퍼보다 좀 더 길게 가지고 있는 저장소
  • 이전에 작업하던 라인 기억 가능
  • 어떤 내용을 홀드 버퍼에 저장하면, sed 가 다음 해을 읽더라도 원할 때 다시 불러와 재사용 가능

 

 

 

 

 

 

 

 

 

sed option

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

 

  • 덮어쓰기 전의 파일을 따로 저장 가능
sed -i.bak -e '/^#d' my.conf

 

 

 

 

 

 

 

 

 

 

sed subcommand

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

 

 

 

 

 

 

 

 

 

 

s와 함께 사용하는 치환 플래그

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

 

 

 

 

 

 

 

 

 

 

메타 문자

문자 설명
^ 맨 앞
$ 맨 뒤
. 임의의 한 문자
* 직전의 문자를 0회 이상 반복
+ 직전의 문자를 1회 이상 반복
\? 직전의 문자가 0회 혹은 1회만 출현
[ ] 문자 클래스
[abc0-9]이면 숫자와 a, b, c 중 어떠한 한 문자
| OR
[ab | ap] 이면 ab 혹은 ap
{3} 직전의 문자가 3번만 출현
{3, 5} 직전의 문자가 3~5번 출현
\b 단어 구분

 

 

 

 

 

 

 

 

 

 

sed 사용 예시

 

  • 8행부터 끝까지 출력
sed -n '8,$p' test.txt

 

 

 

 

 

 

  • #로 시작하는 코멘트행 삭제
sed '/^#/d' test.txt

 

 

 

 

 

 

  • 빈 행 삭제
sed '/^$/d' test.txt

 

 

 

 

 

 

  • 6행부터 28행까지 삭제한 후 새로운 파일로 저장
sed '15,26d' test.txt > test2.txt

 

 

 

 

 

 

  • 첫 번째로 나타난 'redis' 문자를 '레디스'로 치환
sed -e 's/redis/레디스/3' test.txt

 

 

 

 

 

 

  • 모든 'redis' 문자를 '레디스'로 치환
sed -e 's/redis/레디스/g' test.txt

 

 

 

 

 

 

  • 대소문자 구분하지 않고 모든 'redis' 문자를 '레디스'로 치환
sed -e 's/redis/레디스/gi' test.txt

 

 

 

 

 

 

  • 파일의 마지막에 내용 추가하고 기존 내용(원본) 덮어쓰기
sed -i '$a추가할내용' test.txt

 

 

 

 

 

 

  • 탭을 스페이스로 변환
sed -e 's/<tab>/<space>/g' test.txt

'Linux Basic' 카테고리의 다른 글

ftp 명령어  (1) 2024.02.01
nohup 명령어  (0) 2024.02.01
set 명령어  (0) 2024.01.24
grep 명령어  (0) 2024.01.23
find 명령어  (0) 2024.01.17