행위

Sed 명령어

DB CAFE

thumb_up 추천메뉴 바로가기


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 패턴 스페이스 와 홀드 스페이스[편집]

?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnZHd6%2FbtqEsDE9VUa%2FpmR81oKgh75TFjJuMNsGQ1%2Fimg.png

  • 패턴 스페이스(Pattern space)
  1. 패턴 버퍼 임시 저장 공간
  2. 파일을 라인단위로 읽을 때 그 읽힌 라인이 저장되는 임시 공간
  • 홀드 스페이스(hold space)
  1. 홀드 버퍼 임시 저장 공간
  2. 패턴 버퍼처럼 짧은 순간 임시 버퍼가 아닌 더 길게 저장되는 저장 공간
  3. 예로 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'	# 상동