sed 편집기

OS/리눅스 & 유닉스 2012. 1. 5. 08:37

http://blog.naver.com/illi0001?Redirect=Log&logNo=140110607926 

sed 편집기

 

한 번에 한 줄씩 파일(또는 입력 내용)을 처리해서 결과를 화면에 보낸다.

 

1. 정규 표현식

 

  sed는 정규표현식과 메타 문자를 이용햇 파일에서 패턴을 검색하는 것이 grep과유사하고,

  정규 표현은 검색과 치환을 위해 슬래시(/)로 글자는 묶는 패턴이다.

  - sed -n '/RE/p' filename

  - sed -n '/love/p' filename

  - sed -n 's/RE/replacement string/' filename

  - sed -n 's/love/like/' filename

 

  정규 표현식 구분자를 변경하려면, 역슬래시를 이용

  문자 c를 정규표현식 구분자로 사용하려면, c 앞에 역슬래시를 오게 한 후 패턴을 지정하고 이어 구분자 c로 끝내면 된다.

  - sed -n '/love/p' filename

  - sed -n '\cREcp' filename

  문자 x로 역슬래시를 대신

 

2. 주소 지정

 

  주소를 지정해서 편집하고자 하는 줄을 선택

  sed 명령은 sed가 해당 줄에 대해서 출력, 삭제, 변경 등과 같이 어떤 작업을 해야 하는지 알려준다.

  - sed '1, 3d' myfile

    . myfile 의 1~3 줄을 삭제

  - sed -n '/[jJ]ohn/p' datafile

    . datafile에서 john, John 패턴과 일치하는 줄만 출력

 

3. 명령과 옵션

 

  sed 명령은 주소로 지정된 각 줄을 처리하고, 지정하지 않으면, 입력 내용의 모든 줄을 처리

 

  - sed 명령

  

 

  - sed 옵션

    

 

  - 다중 명령이 사용되거나 주소를 주소 범위 내에 중첩할 필요가 있을 때는, 명령을 중괄호로 묶고 각 명령들을 다른 줄에 입력하거나,

    명령 끝에 세미콜론(;)을 붙여야 한다. 느낌표(!)는 명령을 거꾸로 해설할 때 사용.

    . sed '/Tom/d' file

      - Tom이 포함된 모든 줄을 삭제

    . sed '/Tom/!d' file(sh, ksh, bash)

    . sed '/Tom/\!d' file(csh, tcsh)

      - Tom이 포함되지 않은 줄을 삭제

 

  - sed는 비파괴적인 편집기로 사용자가 편집한 내용을 사용자 하면에 출력하며, 상요자가 편집한 것에 대해 파일을 변경하지 않음

    파일에 편집하 것을 변경하기 위해서는, 결과를 다른 파일로 리다이렉트 해야 하고, 원래 파일은 이름을 변경

    . sed '1, 3d' filex > temp

    . mv temp filex

 

4. sed의 정규표현 메타문자

      

 

5. sed 예제

 

  - p 명령 : 출력

    . sed '/north/p' datafile

      - 기본적으로 모든 줄을 출력하고, 패턴과 일치하는 줄을 한번 더 출력

    . sen -n '/north/p' datafile

      - 기본 출력 기능을 금지하고, 패턴과 일치하는 줄만 출력

 

  - d 명령 : 삭제

    . sed '3d' datafile

      - 3번째 줄을 삭제하고, 나머지 모든 줄을 출력

    . sed '3, $d' datafile

      - 3번째 줄부터 마지막 줄까지 삭제하고, 나머지 모든 줄을 출력

    . sed '$d' datafile

      - 마지막 줄을 삭제하고, 나머지 모든 줄을 출력

    . sed '/north/d' datafile

      - 패턴과 일치하는 줄을 삭제하고, 나머지 줄을 출력

 

  - s 명령 : 치환

    . g 플래그는 전역적인 치환

    . sed 's/west/north/g' datafile

      - west를 north로 치환

    . sed -n 's/^west/north/p' datafile

      - west로 시작하는 줄을 north로 치환하고, 그 줄만 출력

    . sed -n 's/west/east/gp' datafile

 

  - 콤마(,) : 범위 지정

    . sed -n '/west/, /east/p' datafile

      - west, east 사이의 패턴 범위에 있는 모든 줄을 출력

    . sed -n '5,/^northeast/p' datafile

      - 5번째 줄부터 northeast로 시작하는 첫 번째 줄까지 출력

 

  - e 명령 : 다중 편집

    . sed -e '1,3d' ?e 's/Hemenway/Jones/' datafile

      - 1~3줄까지 삭제, Hemenway를 Jones로 치환

 

  - r 명령 : 파일에서 읽기

    . sed '/Suan/r newfile' datafile

      - newfile 내용을 Suan과 일치하는 줄 다음으로 입력 데이터 파일로 읽힌다.

 

  - w 명령 : 파일에 쓰기

    . sed -n '/north/w newfile' datafile

      - north 패턴을 포함하는 모든 줄을 newfile에 쓴다.

 

  - a 명령 : 추가

    . sed '/^north /a\ ###Sample Text###' datafile

      - north로 시작하고 여백으로 이어지는 패턴과 일치하는 다음 줄 다음에 추가

 

  - i 명령 : 삽입

    . a 명령과 비슷하나 줄 위에 삽입

    . sed '/eastern/i\ ###Sample Text###' datafile

      - eastern 패턴과 일치하는 줄 위에 텍스트 삽입

 

  - c 명령 : 변경

    . sed '/eastern/c\ ###Sample Text###' datafile

      - eastern 패턴과 일치하는 줄을 텍스트로 변환

 

  - n 명령 : 다음

    . sed '/eastern/{ n; s/AM/Archie/; }' datafile

      - eastern 패턴과 일치하는 다음줄에서 AM을 Archie로 변환
 

  - y 명령 : 변환

    . sed '1,3y/abc...xyz/ABC...XYZ/' datafile

      - 1~3줄의 소문자를 대문자로 변환

 

  - q 명령 : 종료

    . sed '5q' datafile

      - 5번째 줄이 출력된 후 sed 종료

    . sed '/Lewis/{ s/Lewis/Joseph/;q; }' datafile

      - Lewis 패턴과 일치하면 Lewis를 Joseph으로 변경하고, sed 종료

 

  - h, g 명령 : 보류와 얻기

    . sed -e '/northeast/h' -e '$G' datafile

      - northeast 패턴과 일치하는 줄을 마지막에 복사, 추가

    . sed -e '/WE/{h; d;}' -e '/CT/{G;}' datafile

      - WE를 포함하는 줄은 CT를 포함하는 줄 다음으로 이동

 

  - h, x 명령 : 보류와 교체

    . sed -e '/Patricia/h' -e '/Margot/x' datafile

      - Margot을 포함하는 줄을 Patricia를 포함하는 줄로 교체

 

6. sed 리뷰

'OS > 리눅스 & 유닉스' 카테고리의 다른 글

vi 에디터 (커서, 화면 제어)  (0) 2012.01.11
vi 에디터 문자열 치환  (0) 2012.01.09
grep , sed, awk 정규식  (0) 2012.01.05
SED 스트림 에디터  (0) 2012.01.04
Bash 스크립팅 가이드  (0) 2012.01.04
: