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