Sed 명령어
DB CAFE
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
- 1 sed 명령어
- 1.1 sed 옵션 명령어
- 1.2 sed s와 같이 쓰는 치환플래그
- 1.3 출력 p 명령어
- 1.4 삭제 d 명령어
- 1.5 치환 s 명령어
- 1.6 파일 읽는(read) r 명령어
- 1.7 파일에 쓰는(write) w명령어
- 1.8 문자열 추가(append)하기 a 명령어
- 1.9 패턴스페이스와 홀드스페이스
- 1.10 자주 사용하는 sed 명령어 예시
- 1.10.1 문자열이 들어간 행 삭제 후 출력
- 1.10.2 특정 행 삭제 후 다른 파일로 저장하기
- 1.10.3 행에서 특정 문자열만 삭제 후 출력
- 1.10.4 행에서 치환 / 공백 제거
- 1.10.5 문자열 치환후 결과를 파일로 저장
- 1.10.6 문자열 구간의 내용을 삭제 or 치환
- 1.10.7 따옴표 사이의 모든 내용 삭제
- 1.10.8 두 개의 문자열을 한 번에 삭제
- 1.10.9 행에 특수기호가 있는 경우, 역 슬러시(\)를 이용해 삭제
- 1.10.10 특수문자 사이에 있는 내용 모두 삭제
- 1.10.11 빈행과 space가 있는 행의 차이 구분
- 1.10.12 빈행제거
1 sed 명령어[편집]
- Streamlined EDitor
- 파일에서 sed 명령으로 특정 패턴 추출
- cat 명령으로 파일을 확인한 뒤 파이프라인 ( | )을 이용해 패턴 적용
1.1 sed 옵션 명령어[편집]
a\ 현재 행에 하나 이상의 새로운 행을 추가한다.
c\ 현재 행의 내용을 새로운 내용으로 교체한다.
d 행을 삭제한다.
i\ 현재 행의 위에 텍스트를 삽입한다.
h 패턴 스페이스의 내용을 홀드 스페이스에 복사한다.
H 패턴 스페이스의 내용을 홀드 스페이스에 추가한다.
g 홀드 스페이스의 내용을 패턴 스페이스에 복사한다. (패턴 스페이스가 비어있지 않은 경우에는 덮어쓰기~)
G 홀드 스페이스의 내용을 패턴 스페이스에 복사한다. (패턴 스페이스가 비어있지 않은 경우에는 그 뒤에 추가)
l 출력되지 않는 특수문자를 명확하게 출력한다.
p 행을 출력한다.
n 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리하게 한다.
q sed를 종료한다.
r 파일로부터 행을 읽어온다.
! 선택된 행을 제외한 나머지 전체 행에 명령어를 적용한다.
s 문자열을 치환한다.
1.2 sed s와 같이 쓰는 치환플래그[편집]
g 치환이 행 전체에 대해 이뤄진다.
p 행을 출력한다.
w 파일에 쓴다.
x 홀드 버퍼와 패턴 스페이스의 내용을 서로 맞바꾼다.
y 한 문자를 다른 문자로 변환한다. (y에 정규표현식 메타문자를 사용할 수 없다)
1.3 출력 p 명령어[편집]
sed -n '/love/p' file
# file파일에서 love가 포함된 행 출력
# -n 옵션이 있어야 love 패턴을 포함하는 줄들만 출력
sed -n '/west/,/east/p' file
# file파일에서 west 와 east가 나오는 행 사이의 모든 행 출력
# west가 east 다음에 나오면 west가 나오는 행부터 파일의 마지막까지 출력
sed -n '3,/^employee/p' file
# 3번째 행부터 employee로 시작되는 행까지 출력
1.4 삭제 d 명령어[편집]
sed '3d' file
# file파일에서 3번째 행 삭제. 나머지 행들이 출력.
sed '5,$d' file
# 5번째 행부터 마지막 행까지 삭제, 그리고 나머지 행들이 출력
sed '$d' file
# 마지막 행을 삭제. d명령어로 삭제된 행 이외의 모든 행들이 출력
sed '/apple/d' file
# 파일에서 apple 포함하는 모든 행을 삭제 나머지 행을 출력
1.5 치환 s 명령어[편집]
sed 's/clere/clear/g' file
sed -n 's/clere/clear/gp' file
# g플래그는 행 전체 치환 , clere라는 단어가 보이면 clear로 전체행을 치환
# 치환 s 와 -n,p조합 하여 변경이 일어난 행들만 출력
1.6 파일 읽는(read) r 명령어[편집]
sed '/ref/r addfile' file
# file파일로부터 ref라는 단어를 찾으면 그 패턴찾은 행 뒤에 addfile의 내용을 붙여 출력
1.7 파일에 쓰는(write) w명령어[편집]
sed -n '/north/w outputfile' file
# file파일로부터 north라는 패턴이 포함된 행을 찾아 결과를 outputfile에 저장
1.8 문자열 추가(append)하기 a 명령어[편집]
sed '/END$/a\THANK YOU FOR READING' file
# file파일에서 END로 끝나는 행을 찾아, 그 다음에 'THANK YOU FOR READING'을 추가
1.9 패턴스페이스와 홀드스페이스[편집]
sed -e '/northeast/h' -e '$G' file
# file파일에서 northeast라는 단어를 찾은 후 그 행들을 홀드스페이스에 저장 (h명령어)
# 그리고 마지막 행($)에 홀드스페이스 내용을 패턴스페이스에 복사, 대문자G의 경우 패턴스페이스에 내용이 있을 경우 뒤에 추가하는 명령어로, 텍스트 맨 뒤에 복사 됨.
# 즉, 패턴 northeast를 포함하는 행들은 모두 홀드 스페이스로 복사 후 파일의 마지막에 추가
1.9.1 패턴 스페이스 와 홀드 스페이스[편집]
- 패턴 스페이스(Pattern space)
- 패턴 버퍼 임시 저장 공간
- 파일을 라인단위로 읽을 때 그 읽힌 라인이 저장되는 임시 공간
- 홀드 스페이스(hold space)
- 홀드 버퍼 임시 저장 공간
- 패턴 버퍼처럼 짧은 순간 임시 버퍼가 아닌 더 길게 저장되는 저장 공간
- 예로 2라인을 작업중이더라도 1라인을 기억할수 있음.
1.10 자주 사용하는 sed 명령어 예시[편집]
sed '/a/d' test.txt a가 포함된 행 삭제
sed 's/a//g' test.txt a가 포함된 행에서 a만 지우고 출력
sed 's/ //g' test.txt 행에서 공백(space) 제거
sed '/^$/d' test.txt space 조차 없는 빈 행 삭제
sed '/^\s*$/d' test.txt space만 있는 빈 행이라면 해당 행 삭제
sed 'a\\' test.txt 행마다 위,아래 공백인 행 추가
sed 's/a.*b//' 각 행에서 a ~ b 까지 전체 내용 삭제 후 출력
sed 's/\[//g' 특수문자인 대괄호 '[' 삭제 (역슬러시 or 달러표시 사용)
1.10.1 문자열이 들어간 행 삭제 후 출력[편집]
sed '/--norc/d'
# 문자열이 들어간 행 삭제
# 특정 문자열이 들어간 행 삭제
# '--norc' 문자열이 들어간 행을 삭제함
1.10.2 특정 행 삭제 후 다른 파일로 저장하기[편집]
grep -v "--norc" >> test.txt
sed '/--norc/d' >> test.txt
# --norc가 들어간 행 전체 삭제 후 test.txt 파일로 저장
1.10.3 행에서 특정 문자열만 삭제 후 출력[편집]
sed 's/값 1/값 2/g' # 값 1을 값2로 치환
sed 's/--norc//g'
--norc가 들어간 행에서 일부 문자열만 삭제 후 출력
# 행 전체를 삭제하는 것이 아닌, 특정 문자만 제거한 뒤 출력
1.10.4 행에서 치환 / 공백 제거[편집]
sed 's/--norc/--test/g' # --norc를 --test로 치환하기
# 문자열을 다른 문자열로 치환
sed 's/ //g' # space를 삭제한 뒤 출력
# 문자사이_공백제거
1.10.5 문자열 치환후 결과를 파일로 저장[편집]
sed 's/--norc/--test/g' >> test.txt # --norc를 --test로 바꾼 뒤 결과를 test.txt로 저장
1.10.6 문자열 구간의 내용을 삭제 or 치환[편집]
sed 's/running.*--norc//g' # running부터 --norc까지의 모두 삭제
sed 's/running.*--norc//g' # sed 's/값 1.*값 2//g'
1.10.7 따옴표 사이의 모든 내용 삭제[편집]
sed 's/".*"//' # 따옴표 " " 사이의 내용 모두 삭제
# 뒷부분의 g를 붙이지 않았는데도 따옴표 사이의 내용이 모두 삭제
1.10.8 두 개의 문자열을 한 번에 삭제[편집]
sed' s/값 1\|값 2/ /g''
sed 's/running:\|--norc//g' # running: 와 --norc 두 개의 문자열 삭제 후 출력
# 역 슬러시 (\)와 파이프라인 (|)을 이용하면 두 개의 문자열을 한 번에 패턴에 적용명령어를 적용
# 문자열 구간에 여러 개의 문자열을 지정 가능.
1.10.9 행에 특수기호가 있는 경우, 역 슬러시(\)를 이용해 삭제[편집]
sed 's/\[\|\]/ /g' # 특수기호인 대괄호 '[, ]'만 제거 후 출력
1.10.10 특수문자 사이에 있는 내용 모두 삭제[편집]
sed 's/\[.*\]//g' # 대괄호 '[, ]' 사이 내용 모두 삭제
1.10.11 빈행과 space가 있는 행의 차이 구분[편집]
sed 'a\\' >> test2 # 행별로 그 사이 빈행을 하나씩 추가하여 test2 파일로 저장하기
# 행별로 빈 행이 하나씩 추가(a 옵션)
# 빈 행에는 실제로 아무런 값이 없는 행과 빈공간(space)로 존재하는 행이 있음.
1.10.12 빈행제거[편집]
sed '/^$/d' # 아무런 값이 없는 빈 행 제거
sed '/^\s*$/d' # 공백 (space)으로 이루어진 빈 행 제거
sed '/^[[:space:]]*$/d' # 상동