Today I Learn -33

이정빈·2021년 3월 31일
0

클라우드 엔지니어

목록 보기
34/53
post-thumbnail

sed (Stream Editor)

vi, gedit, nano : file editor
sed : stream editor

sed 특징

Interactive 기능이 없는 에디터 : 비대화형 에디터
파일을 수정하여도 수정내용이 반영되지 않음: -i 옵션 사용시 파일에 저장
쉘 프로그래밍에서 많이 사용
line 단위의 처리
vi 편집기와 유사한 부분이 있음

pattern space

sed는 텍스트를 라인 단위로 처리
처리를 하기 위해 텍스트 데이터를 가져와서 가공하는 공간
처리가 끝난 텍스트 데이터는 화면으로 출력
처리가 완료된 텍스트 데이터를 패턴 스페이스에서 제거됨

sed 실행 형식

sed [옵션] ‘명령어’ 대상 : 특정 범위를 지정하지 않고 전체 라인에 적용
sed [옵션] ‘패턴 명령어’ 대상
sed [옵션] ‘범위 명령어’ 대상
범위 : 라인 수(주소, address)
$ : 주소 부분에 사용시 마지막줄을 의미
범위 지정시 [시작 주소],[마지막 주소] 형식으로 사용
범위에 주소 대신 패턴으로 지정 가능
주소
주소,주소
/패턴/,/패턴/
/패턴/,주소
주소,/패턴/

sed 명령어

p : print 출력
!p : 패턴에 해당되지 않는 라인 출력
d : delete 삭제
s : substitute 교체. 텍스트 데이터 바꾸기. vi 편집기에서 사용하는 방식과 동일
s/찾을패턴/바꿀내용/ : 라인에서 첫 번째 확인된 패턴만 교체
s/찾을패턴/바꿀내용/g : 교체 플래그. g가 있을 경우, 라인 내 패턴을 전체 교체
q : quit 종료

sed 명령어 옵션

-n : 패턴스페이스에서 처리한 라인의 기본 출력을 억제, 보통 p와 함께 사용
-e : 다중 편집 실행
-f : 스크립트 형태로 편집할 내용을 불러오기
-i : 변경내용을 파일에 저장

==============================================

sed 기본 연습 (datafile 로 해보세요)

north 패턴을 가지고 있는 라인만 출력
west 패턴을 가지고 있는 라인부터 east 패턴을 가지고 있는 라인까지 출력
5번줄부터 northeast 패턴이 있는 라인까지 출력
north 패턴이 없는 라인을 출력

sed 편집 명령어

a : 대상 아래줄에 라인 추가, 여러 줄을 한꺼번에 추가할 수 있음
i : 대상 윗줄에 라인 추가. 여러 줄을 한꺼번에 추가할 수 있음
라인 안의 내용을 삽입하기 위해서는 a, i 명령 대신 s명령으로 처리
s/[3-5]/&hello/ : [3-5] 패턴을 찾아서 해당 패턴 위치 뒤에 hello 삽입
c : change. 지정된 라인을 변경
r : 파일에 있는 내용을 읽어와서 a형태로 추가
w : 파일에 기록
주의 : 읽어올 파일과 기록할 파일이 같을 경우 정상적으로 동작하지 않음
sed ‘3,5w test.txt’ test.txt
test.txt 파일이 빈 파일로 변경됨
중간 파일을 만들어 기록 후 덮어쓰기로 변경
sed ‘3,5w test2.txt’ test.txt
cp test2.txt test.txt

다중 편집 (-e)

sed를 사용한 편집을 한 명령어로 수행
-e <실행할내용1> -e <실행할내용2> ....
실행할내용1을 전부 수행한 후 실행할내용2를 수행
앞 단계의 실행 내용이 뒷 단계의 실행내용에 영향을 줄 수 있음

스크립트 실행 (-f)

스크립트에 포함하는 내용 : ‘ ‘ 내부에 들어가는 내용
여러 명령을 한꺼번에 집어넣기 가능
스크립트 내부에 내용 작성시 ‘ ‘ 기호는 제외
스크립트 끝부분에 불필요한 공백이 있을 경우 에러가 날 수 있음
한 줄에 여러 명령어를 함께 사용할 수 있음 (; 기호 사용)
주석 사용가능 : # 기호가 맨 앞에 있을 경우 주석으로 처리됨
스크립트 사용 명령
sed -f [스크립트이름] <편집할 파일이름>

this is sed script sample
'1i\

This is Number List

1,3 s/[0-9]/&hello/
5c\
merong

a

===================================================================

sed 종합실습 (databook 파일을 사용하세요)

  1. Jon의 이름을 Jonathan으로 교체하세요
    sed -n 's/^Jon/Jonathan/p' databook

  2. 처음 세 행을 삭제 하시오
    sed '1,3d' databook

  3. Lane이 포함된 행을 삭제하시오
    sed ‘/Lane/d’ databook

  4. 생일이 11월이나 12월인 사람들의 행을 출력하시오
    sed -n '/:1[12]\/[0-9]/p' databook

  5. Fred로 시작하는 행의 끝에 세 개의 별표()를 붙이시오
    sed -n '/Fred/ s/.
    $/&***/p' databook

  6. Popeye의 생일을 11/14/46으로 교체하시오
    sed -n ‘/Popeye/ s/3\/19\/35/11\/14\/46/p’ databook
    sed -r -n ‘/Popeye/ s/:1?[0-9]\/[123]?[0-9]\/[0-9][0-9]:/:11\/14\/46:/p’ databook

  7. 빈행을 삭제하시오
    sed ‘/^/ddatabooksed/[[:space:]]/d’ databook sed '/^[[:space:]]*/d' databook

  8. 아래와 같이 수정하는 sed 스크립트를 작성하시오
    첫 줄에 Personal File 제목 삽입
    San Francisco에 거주하는 사람을 제거
    마지막 줄에 THE END 추가

    sed script sample
    1i\
    Personal File
    /San Francisco/d
    $a\
    The End

sed -f sedscript databook

profile
WAS Engineer, Cloud Engineer(지망)

0개의 댓글