FITH(fith@)님이 적수네 동네에 올린글입니다.


SED (Streamlined Editor)

SED 가 뭘까요.?

sed 는 간편하고 , 비 대화식으로 사용하는 텍스트 에디터 입니다.
vi 로 할수 있는 일들을 하지요. 하지만 vi 가 대화식 에디터 인 반면, sed 는 비 대화식의 에디터 입니다.

즉 , 여러분이 쉘 프롬프트에 명령어를 입력 하는 것 처럼 문서를 편집 할수 있다는 이야기지요..
아주 유용 하게 사용 할수 있는 중요한 UNIX 툴입니다.


SED 는 어떻게 작동 할까요.?

sed 는 표준 입력이나, 파일을 통해 문자열을 입력 받아서 , 어떠한 처리를 한다 음, 표준 출력으로 출력 합니다.
즉 입력에서 한줄을 읽어 들여서 버퍼에 저장 한후 , 가공해서 스크린에 뿌리는 형식 입니다.
vi 에서 사용 하셨던 :명령 들과 command 모드 명령 들을 가지고 입력 된 것들을 처리 합니다.


사용 예제를 함 볼까요.?

sed '1,3d' file - file 에서 1 줄에서 3줄 까지 를 지워라.
sed '/[Uu]inx/p' file - file 에서 Unix 나 unix 라는 단어가 포함 된줄을 복사 해라.
sed '/unix/d' file - file 에서 unix 라는 단어가 포함된 줄을 지워라.
sed '/unix/!d' file - file 에서 unix 라는 단어가 포함 되지 않은 줄을 지워라.


SED 에서 사용 하는 옵션은 없나요.?

sed 는 기본적인 세가지 옵션이 있는데요. -e ,-f, -n 이 그것 입니다..
아래 각 옵션들에 대해 정리 해 보 았습니다.

-e 옵션은 프롬프트 상에서 여러개의 작업을 하고자 할때 사용 합니다.
-f 는 sed script 파일을 실행 할때 사용 합니다.
-n 은 처리결과를 출력하지 못하도록 하는 데 쓰이는 옵션입니다.

SED 의 에러 메세지는 어떤 것들이 있나요.?

사용 자에 따라 다르게 , 아주 다양하게 나타나지만 주로 아래 와 같은 두가지 경우가 많습니다.
자세한 건 직접 해보시면서 해결 하셔야 할듯...


1. 잘못된 명령어..

sed 에서 지원 하지 않는 잘못된 명령어를 입력 하였을때 발생 합니다.

sed '1,3v' sedtest
sed: 1: "1,3v": invalid command code v


2. 명령어의 잘못된 사용.

sed 의 문법에 맞지 않게 명령을 작성 하였을 경우 입니다.

sed '/^John' sedtest
sed: 1: "/^John": unterminated regular expression

SED 를 알려 주세요~!
sed 에는 여러 가지 명령어 들이 있는데, 하나하나씩 예제를 보면서 설명 하기로 하지요.

p : print
sed '/profile/p' sedtest
sed -n '/profile/p' sedtest

d : delete

sed '3d' sedtest
sed '3,$d' sedtest
sed '$d' sedtest
sed '/first/d' sedtest

s : substitution

sed 's/fith/fish/g' sedtest
sed -n 's/admin/adam/p' sedtest
sed 's/[0-9][0-9]/&.5/' sedtest
sed -n 's/(ad)min/1ministrator/p' sedtest
sed '/profile/,/onsort/s/^/**END**/' sedtest

r : read from file

sed 's/profile/r newfile' sedtest

sed 's/profile/r newfile' sedtest

a : append

sed '/profile/a This is a APPENDED LINE' sedtest

n : next

sed '/test/{n; s/fith/fish/; }' sedtest

-e : Multiple Edit

sed -e '1,3d' -e 's/fith/fish/' sedtest

sedtest
======================================================================
total 39
drwxr-xr-x 3 fith admin 512 12/21 00:16 .
drwxr-xr-x 29 root wheel 512 12/ 7 17:09 ..
-rw------- 1 fith admin 432 12/19 22:53 .bash_history
-rw-r--r-- 1 fith admin 628 10/27 22:38 .cshrc
-rw------- 1 fith admin 1986 12/20 13:49 .history
-rw-r--r-- 1 fith admin 299 10/27 22:38 .login
-rw-r--r-- 1 fith admin 160 10/27 22:38 .login_conf
-rw------- 1 fith admin 371 10/27 22:38 .mail_aliases
-rw-r--r-- 1 fith admin 331 10/27 22:38 .mailrc
-rw-r--r-- 1 fith admin 722 10/27 22:38 .profile
-rw------- 1 fith admin 12288 12/21 00:15 .sed.swp
-rw-r--r-- 1 fith admin 852 10/27 22:38 .shrc
-rw-r--r-- 1 fith admin 41 12/ 7 19:34 .vimrc
-rw-r--r-- 1 fith admin 32 12/19 22:37 1
drwx------ 2 fith admin 512 12/19 10:11 Mail
-rw-r--r-- 1 fith admin 48 12/16 11:32 dd
-rw-r--r-- 1 fith admin 83 12/16 11:12 err
-rw-r--r-- 1 fith admin 48 12/16 10:46 ff
-rw-r--r-- 1 fith admin 27 12/13 22:13 first
-rw-r--r-- 1 fith admin 19 12/14 00:06 forth
-rw-r--r-- 1 fith admin 87 12/17 03:36 onsort
-rw-r--r-- 1 fith admin 48 12/16 14:34 res
-rw-r--r-- 1 fith admin 87 12/17 03:36 onsort
-rw-r--r-- 1 fith admin 48 12/16 14:34 res
-rw-r--r-- 1 fith admin 144 12/20 23:04 result
-rw-r--r-- 1 fith admin 27 12/13 22:52 second
-rw-r--r-- 1 fith admin 681 12/21 00:15 sed
-rw-r--r-- 1 fith admin 0 12/21 00:16 sedtest
-rw-r--r-- 1 fith admin 22 12/14 00:17 test
-rw-r--r-- 1 fith admin 81 12/13 23:03 third
======================================================================


What is AWK?
============
text 데이터나 리포드를 작성 하는 데 사용 되는 프로그래밍 언어.
표준입력 으로 들어오는 데이타를 처리하여 , 표준 출력으로 출력 하는 프로그램
프롬프트상에서 간단히 입력 할 수도 있고, 복잡한 프로그램을 작성 할 수도 있다

AWK command format
==================


1. 파일을 통한 입력

awk 'pattern' filename
awk '{ action }' filename
awk 'pattern { action }' filename

ex ]
awk '/닉스/' employees - 패턴검색
awk ' { print $1 }' employees - 파일의 모든 라인에 대해서 해당 명령 처리
awk '/닉스/{ print $1,$2 }' employees - 패턴검색 후 해당 라인에 대한 명령 처리


2. PIPE를 통한 입력.

command | awk 'pattern' filename
command | awk '{ action }' filename
command | awk 'pattern { action }' filename

ex ]

df | awk '$4 > 300000'
w | awk '/fith/{ print $1,$3 }'


3. 출력 형식 지정 (print)

date | awk '{print "현재 년도 :" $1 "n현재 월 : " $2}'

b : 백 스페이스
f : form feed
n : new line
r : carriage return
t : tab
x : escape caracter x

awk '/닉스/{print "ttHave a nice day," $1,$2 "!"}' employees


4. C style output format ( printf )

echo "UNIX" | awk '{ printf "|%-15s|n",$1 }'
echo "UNIX" | awk '{ printf "|%15s|n",$1 }'
awk '{ printf "The name is: %-15s ,ID is %8dn", $1$2,$3 }' employees

%c : ASCII 문자 하나.
%s : ASCII 문자열.
%d : 10 진수.
%o : 8 진수 .
%x : 16 진수 .
%f : 부동소수점.


5. AWK script

awk -f awkfile employees


6. Records AND Fields

Records : awk 는 입력의 한 라인, 한 라인을 Record 라고 부른다.

The Record Separator
- awk 는 기본적으로 carriage return 으로 각 record 를 구분.
- ORS ,RS 등의 내부 awk 내부 변수로 제한적으로 조정 가능.

$0 : awk 는 $0 으로 record 전체를 참조 할수 있다. print 의 기본 값으로 사용 된다.

awk '{ print $0 }' employees
awk '{ print }' employees

NR : awk 는 처리한 record 의 번호를 NR 이라는 내부 변수로 저장 한다.
($NR 아님!)

awk '{ print NR , $0 }' employees

Fields : awk 의 각 record 는 space,tab 으로 구분된 단어로 이루어져 있는데, 이 단어들을 Field 라 부른다.

The Fields Separators
- awk 는 기본적으로 spacebar ,tab 등으로 각 field 를 구분.
- -F 옵션이나 ,FS 변수를 통해 변경 가능. -F 옵션이 주로 쓰인다.

awk -F: '/^root/{print $6 ,$7}' /etc/passwd
awk -F'[ :t]' '{ print $1,$2,$3}' /etc/passwd


7. Regular Expression

awk '/^[A-Z][a-z]+ /' employees
awk '$1 ~ /[Bb]ill/' employees
awk '$1 !~ /[Bb]ill/' employees


8. Operators
< , <= , == , != , >=, > ,&& ,||,!

awk '$3 > 1234' employees
awk '$3 > 1234 && 4500 > $3' employees
awk '!($3 < 1234 || 4500 < $3)' employees


'ETC' 카테고리의 다른 글

고급 Bash 스크립팅 가이드  (0) 2002.01.27
MC(midnight commander) FAQ  (0) 2001.12.26
시스템 기본 에디터 변경  (0) 2001.11.16
ncftp 에 관한 몇가지 팁들  (0) 2001.11.11
리눅스 커널 문서링크  (0) 2001.10.16

+ Recent posts