[OS]/Embedded&Linux

sed, awk 사용법

하늘을닮은호수M 2008. 10. 23. 20:51
반응형
출처 : http://blog.daum.net/techtip/12414404

  • sed CMD

    • sed 명령어는 스트림 에디터이다. 역할은 원본 파일에 변형을 주지 않고 단지 출력되는 결과를 변화시켜 보여주는 역할을 한다. 에디터의 일종이기 때문에 vi 편집기와 같은 많은 기능을 제공하고 있다. 또한 sed 명령어는 스크립트 형태로 파일에 저장할 수 있기 때문에 다중 편집이나 쉘 명령행에서 인용부호를 사용하는데 따르는 어려움을 줄여준다.

    • ex)

    • # sed '1,3p' /etc/passwd               -> 1,2,3개의 라인을 한번더 출력

    • # sed -n '1,3p' /etc/passwd            -> 1,2,3 라인까지를 출력

    • # sed '1,3d' /etc/passwd               -> 1,2,3 라인을 제외한 나머지 라인을 출력

    • # sed 's/root/ROOT/' /etc/group        -> root를 찾아서 ROOT로 변경후 출력

    • # sed '1,3s/root/ROOT/g' /etc/group    -> 1,2,3 라인에서 root를 ROOT로 변경후 출력

    • # sed -n '/root/,/adm/p' /etc/passwd   -> root문자에서 adm 문자까지를 출력

    • # sed -n '5,/^nobody/p' /etc/passwd    -> 5번째 라인부터, 라인이 처음으로 nobody로 시작하는 라인까지

    • # sed -n '/[Rr]oot/p' /etc/passwd      -> Root나, root를 모두 포함해서 출력

    • # sed -n '/root/p' /etc/passwd         -> root가 포함된 라인만 출력

    • # sed -n '3p' /etc/passwd              -> 3번째 라인만 출력

    • # sed '3d' /etc/passwd                 -> 3번째 라인만 제외하고 출력

    • # sed 's/root/ROOT/g' /etc/passwd

    • # sed 's/^root/ROOT/g' /etc/passwd 

    • # sed -n 's/^root/ROOT/p' /etc/passwd

    • # sed -n 's/root/ROOT/gp' /etc/passwd

    • # sed 's/[0-9][0-9]$/&.5/' /etc/passwd

    • # sed 's/(∖Mar∖)got/∖1ianne/p' datafile

    • # sed 's/....//' filename              -> 각행의 첫 4글자 삭제

    • # sed 's/....$//' filename             -> 각행의 마지막 4글자 삭제

    • # sed 's#root#ROOT#g' /etc/passwd

    • # sed '/export/s/-/rq/g' /etc/vfstab

      • /etc/vfstab에서 export라는 단어를 찾고, 그라인에 있는 [-] 를 [rq]로 global 하게 변경.

    • # sed '/west/,/east/s/$/**VACA**/' datafile (<==> 1,15s/$/**VACA**/')

      • west부터 시작해서 east까지 찾아서, 각 라인의 끝에다가 **VOCA**를 덧붙여 준다.

    • sed -e '1,5d' -e 's/no/NO/g' /etc/passwd 

      • 5라인을 지우고 ,no를 NO로 변경

    • sed -f script.sed /etc/passwd

      • 미리 만들어놓은 파일을 적용


    • File 다루기

      • 파일 내용 필터링 하기

        • 1. 파일의 첫번째 라인 지우기

          • # sed '1d' filename

        • 2. 파일의 마지막 라인 지우기

          • # sed '$d' filename

        • 3. 파일의 특정한 라인 지우기

          • # sed '3,5d' filename

          • # sed '1,0d' filename

          • # sed '10,$d' filename

          • # sed '/root/,/other/d' filename

          • # sed '/root/d' filename

      • 파일 내용 치환 하기

        • 1. 파일의 첫라인에 새로운 내용 추가

          • # sed '1,3s/^/HIS:    /g' filename   -> 1,2,3의 첫번째 라인에 HIS를 추가

          • # sed '10,$s'/^/HIS:  /g' filename

          • # sed '10,20s/%/     /g' filename    -> 공백만큼 들여쓰기

        • 2. 파일의 끝라인에 새로운 내용 추가

          • # sed '1,3s/$/ 

        • 3. 파일의 특정한 라인에 새로운 내용 추가

          • # sed '/export/s/-/rq/g/; /etc/vfstab

        • 4. 파일의 주석 모두 지우기

          • # sed -e '/#/d' filename

        • 5. 파일의 공백 지우기

          • # sed -e '/^$/d' filename

    • 옵션

      옵션

      설명

      -e

      다중 편집을 가능하게 한다.

      -f

      sed 스크립트 파일 지정에 사용된다.

      -n

      기본 출력을 생략한다.



    • 메타문자

      메타문자

      기능

      사용예

      사용 예 설명

      &

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

      s/love/**&**

      앰퍼샌드(&)는 검색열을 나타낸다. 문자역 love가 앰퍼샌드로 치환된다. 왼쪽의 경우 love는 **love**로 치환된다.


  • awk CMD

    • 기능

      • ① Filters
      • ② Numerical processing on rows and columns of data
      • ③ Text processing to perform repetitive editing tasks
      • ④ Report generation

    • 확장 명령어
      • gawk (Gnu Awk CMD)
      • nawk (New Awk CMD)

    • 형식
      • awk 'statement' filename

      • statement is

        • ① pattern
        • ② {ACTION}
        • ③ pattern {ACTION}

      • $1 ~ $9는 각 필드에 대한 구분이며 $0은 모든 필드를 의미한다.



    • ex)
      • # awk '{ print $0 }' testfile

      • # awk '{ print $3 $5 $9 }' testfile

      • # awk '{ print $3, $5, $9 }' testfile

      • # awk '{ print $3 " " $9 " " $6, $7 }' testfile

      • # awk '{ print $3 "\t" $5 "\t" $9 }' testfile

      • # awk '{ print $9, "is using", $5, "bytes" }' testfile

      • # awk '/file/' testfile

      • # awk '/^-/' testfile

      • # awk '{ print $1, $2, $3 }' testfile

      • # awk '/file/ { print $1, $2 }' testfile

      • # awk '/file/ { print $1 "∖t" $2 }' testfile

      • # awk '/dir/ { print $1 "∖t" $2 "∖t" $3 }' testfile

      • # awk -F: '/root/ { print $1 "∖045" $2 }' /etc/passwd

      • awk -F: '$3 > 99 && $3 < 60000 { print $1 }' /etc/passwd

반응형

'[OS] > Embedded&Linux' 카테고리의 다른 글

server tuning 체크 리스트(netfilter 사용 시)  (0) 2012.01.06
redmine  (0) 2012.01.03
Trac Authentication  (0) 2007.10.24
svn restore  (0) 2007.10.17
trac backup & restore  (0) 2007.10.17