sed 특수문자 :: 에버노트

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • sed 특수문자
    카테고리 없음 2018. 4. 11. 11:34








    Sed(streamlined editor)




    ㅇ 제작 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 서버


    ㅇ SULINUX 홈페이지 : www.sulinux.net

    ㅇ 리눅스포털 홈페이지 www.superuser.co.kr

    Sed(streamlined editor)


    sed는 대화형 기능이 없는 편집기이다명령행에서 직접 편집 명령어와 파일을 지정하여 작업한 후 결과를 화면으로 확인한다. sed 편집기는 원본을 손상하지 않는다리다이렉션을 이용하여 편집 결과를 파일로 저장하여 확인할 수 있다.


    1. 주소 지정

    주소 지정이란 편집하고자 하는 행을 선택하는 것을 말한다이 주소는 숫자나 정규표현식 또는 둘의 조합으로 표현한다주소를 지정하지 않은 경우 입력 파일 전체 행에 대하여 작업을 진행한다.

    sed ‘1,3p’ datafile

    : datafile의 1행에서 3행까지 출력한다. p는 행을 출력하라는 명령어이다.


    sed -n ‘/[Ll]ove/p’ datafile

    : datafile에서 Love나 love를 포함하는 행만 출력한다.



    2. 명령어와 옵션

    2.1 명령어

    a : 현재 행에 하나 이상의 새로운 행을 추가한다.

    c : 현재 행의 내용을 새로운 내용으로 바꾼다.

    i : 현재 행의 위에 삽입한다.

    행을 삭제한다.

    출력되지 않는 특수문자를 출력한다.

    p : 행을 출력한다.

    n : 다음 입력 행을 첫 번째 명령어가 아닌 다음 명령어에서 처리하게 한다.

    q : sed를 종료한다.

    r : 파일로부터 행을 읽어온다.

    선택된 행을 제외한 나머지 전체 행에 명령어를 적용한다.

    s : 문자열을 치환한다.


    2.2 옵션

    -e : 다중 편집시 사용.

    -f : sed 스크립트 파일 지정에 사용.

    -n : 출력을 생략한다.


    2.3

    다중명령어를 사용하거나 주소 지정이 다른 주소 지정 범위와 중첩되는 경우에는 명령어들을 중괄호안에 넣고각 명령어의 끝에 세미콜론을 붙인다.

    !는 명령어를 반전하는데 사용한다다음 예는 love를 포함하지 않은 행들을 삭제한다.

    sed ‘/love/!d’ datafile



    3. 메타문자

    : grep 등과 마찮가지로 sed는 패턴검색을 위하여 특별한 메타문자를 제공한다.


    ^ : 행의 시작 지시자

    ex) /^love/ : love로 시작하는 행


    $ : 행의 끝 지시자

    ex) /love$/ : love로 끝나는 행


    . : 하나의 문자와 대응

    ex) /l..e/ : l 다음에 두 글자가 오고 e로 끝나는 문자열을 포함하는 행


    * : 0개 혹은 임의의 임의 갯수

    ex) / *love/ : 0개 혹은 임의 갯수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행


    [] : [] 사이의 문자 집합중 하나와 대응

    ex) /[Ll]ove/ : Love 또는 love를 포함한 행


    [^] : 문자 집합에 속하지 않는 한 문자와 대응

    ex) /[^A-K]ove/ : A 와 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열


    (..) : 태그로 저장할 수 있는 문자열 지정에 사용.

    ex) s/(lov)able/1er/ : 지정된 부분(lov)을 태그 1에 저장하였다가 사용한다태그를 참조하기 위해서는 1을 사용한다태그는 9개까지 사용할 수 있다예제에서 lovable이 lover로 치환된다.


    & : 검색열을 저장하여 치환열에서 사용할 수 있게한다.

    ex) s/love/**&**/ : 검색열 love가 **love**로 치환된다.


    < : 단어의 시작 지시자

    ex) /<love/ : love로 시작하는 단어를 포함하는 행


    > : 단어의 끝 지시자

    ex) /love>/ : love로 끝나는 단어를 포함하는 행


    x{m} : 문자 x를 m번 반복한다.

    ex) /a{5}/ : a가 5번 반복


    x{m,} : 적어도 m번 반복한다.

    ex) /a{5,}/ : a가 적어도 5번 반복


    x{m,n} : m회 이상 n회 이하 반복한다.

    ex) /a{5,10}/ : a가 5회에서 10회 사이로 반복



    4. 예제

    4.1 출력 : p

    sed ‘/love/p’ datafile

    기본 설정에서는 모든 행을 표준 출력으로 내보낸다패턴 love가 있는 행을 찾으면 그 행을 한 번 더 출력한다.


    sed -n ‘/love/p’ datafile

    기본 설정에 의한 명령어의 동작을 제한한다. -n 옵션을 사용하면 love 패턴을 포함하는 행들만 출력한다.



    4.2 삭제 : d

    sed ‘3d’ datafile

    : 3번 행을 삭제한다다른 행들은 기본적으로 한번 출력된다.


    sed ‘3,$d’ datafile

    : 3번 행부터 마지막 행까지 삭제한다그리고 나머지 행들이 출력된다.


    sed ‘$d’ datafile

    마지막 행을 삭제한다삭제된 행 이외의 모든 행들이 출력된다.


    sed ‘/love/d’ datafile

    : love를 포함한 모든 행을 삭제하고나머지 행들을 출력한다.



    4.3 치환 : s

    sed ‘s/love/peace/g’ datafile

    : love를 peace로 치환한다. g플래그는 행 전체에 치환이 적용됨을 의미한다. g플래그가 없으면 행에서 맨 처음 등장하는 love만 peace로 치환된다.


    sed -n ‘s/^love/peace/p’ datafile

    : -n 옵션은 p플래그와 같이 사용되어 치환이 일어난 행만 출력한다.


    sed ‘s/[0-9][0-9]$/&.5/’ datafile

    : &는 검색열에서 지정한 문자열을 대신한다즉 두자리 숫자로 끝나는 행은 그 숫자들에 .5가 추가된다.


    sed -n ‘s/love/peace/gp’ datafile

    : love가 peace로 치환된 행들만 출력한다. -n 옵션이 명령어와 함께 사용되어 출력을 간단하게 줄여준다. g플래그는 각 행에서 전체 치환이 일어나게 한다.


    sed ‘s#3#99#g’ datafile

    : s 명령어 바로 다음에 오는 문자는 검색열과 치환열을 구분해주는 구분자이다기본적으로 /를 구분자로 사용하지만다른 문자로 바꾸어 쓸 수 있다이는 자체를 포함하는 문자열을 검색할 때 유용하다.


    4.4 행의 선택 범위 쉼표(,)

    sed -n ‘/love/,/peace/p’ datafile

    : love가 나오는 행과 peace가 나오는 행 사이의 모든 행들이 출력된다. love가 peace 다음에 나오면 love가 나오는 행부터 마지막 행까지 출력된다.


    sed -n ‘5,/^love/p’ datafile

    : 5번째 행부터 love로 시작하는 행까지 출력한다.



    4.5 다중 편집 : e

    sed -e ‘1,3d’ -e ‘s/love/peace/’ datafile

    첫 번째 명령은 1행부터 3행까지 삭제하고두 번째 명령은 love를 peace로 치환하는 것이다.



    4.6 파일로 부터 읽기 : r

    sed ‘/love/r newfile’ datafile

    : newfile의 내용을 읽어 datafile의 패턴 love를 찾은 곳에 삽입한다패턴이 여러번 나오면 매번 중복해서 출력된다.



    4.7 파일로 쓰기 : w

    sed -n ‘/love/w newfile’ datafile

    : love를 포함하는 행들이 newfile에 저장된다.



    4.8 붙이기 : a

    sed ‘/^love /a -----’ datafile

    패턴 love로 시작하고 공백문자가 있는 행 다음에 명령어 a뒤의 문자열을 추가한다.



    4.9 삽입 : i

    sed ‘/love/i -----’ datafile

    패턴 love를 찾은 후 명령어 다음에 오는 텍스트를 love가 포함된 행 위에 삽입한다.



    4.10 종료 : q

    sed ‘5q’ datafile

    : 5행까지 출력한 후 sed프로그램 종료한다.


    sed ‘/love/{ s/love/peace/;q; }’ datafile

    패턴 love를 찾은 행에서 love가 peace로 치환되고 명령어로 sed 종료한다.

    다중명령어 처리시 중괄호를 사용하며이때 각 명령어의 끝에 세미콜론을 붙인다.


    5. 맺음말

    이상으로 간단하면서 유용한 sed 편집기에 대하여 알아보았다더 자세한 내용은 man페이지를 참조하시라.


















    참고 서적 유닉스 쉘 바이블 (피어슨에듀케이션코리아)


    [원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1405

    댓글

Designed by Tistory.