눈바래다

0367. [sed] sed 사용법

IT2016. 2. 4. 16:04

명령어 사용법

sed ‘s/old/new/’ myfile

(여기서 마지막 / 빼먹지 않도록 한다)

somecommad | sed ‘s/old/new/’ | othercommand

(마지막 /g 없으면 해당 줄의 첫번째 찾아지는 부분만 변경함)

sed –e ‘s/old/new/’ –e ‘s/old2/new2/’ myfile

sed ‘s/old/new/; s/old2/new2/’ myfile

(; 절대 띄어 쓰기 하면 안된다)

 

Bourn 쉘의 다중라인 명령어 방법

$ sed '

> s/root/kim/

> ' ho

 

파일을 지정하여 명령어 사용

sed –f scriptfile myfile

sed 사용하여 변경된 부분과 원본파일 비교하기

$ sed 's/root/kim/' ho | diff ho -

2c2

< root:x:0:1:Super-User:/:/usr/bin/csh

---

> kim:x:0:1:Super-User:/:/usr/bin/csh

sed 라인 지정 방법

 

sed 1d ho

첫번째 라인 지운다

 

콤마로 분리된 경우는 첫번째 라인 지정 부터 두번째 라인 지정까지 실행된다

sed ‘3,5d’ ho

3번줄 부터 5 줄까지 지운다

 

$ sed '$d' ho

마지막 라인 지운다

 

sed ‘1,/^$/d’ ho

예는 1 부터 공백라인 까지 지운다. 두번째 공백라인 매치되지 않는다면 끝까지 지우게 될것이다.

 

정규표현식은 // 슬래시로 감사져 있다

/^$/d

라인을 모두 지운다.

[ec :/usr7/ec/kim]#sed '/^$/d' a1.out

 

! 라인지정 뒤에 따라오면 라인지정에 매치 되는 라인을 제외하고 해당 명령을 실행한다.

$ sed '3,6!d' ho

구분자는 보통 / 주로 사용하나 반드시 / 필요는 없다.

패턴이 경로면 경우는 구분자 패턴을 : 변경주면 된다

$ sed s:pig:kim: sedtest

kim cow horse

라인의 두번째 문자를 뉴라인 문자로 대치. sed –f 읽어 들일 파일에 기술한다.

$ cat sed1.file

s/[tab]/\

/2

 

$ cat sedt1

Column1 Column2 Column3 Column4

$ sed -f sed1.file sedt1

Column1 Column2

Column3 Column4

sed 치환 명령중 특정라인의 여러 패턴 매치중에 특정 매치를 지정하도록 하는 숫자 플래그가 있다.

중괄호{} 다중조건 실행시 사용한다.

.TS 시작하여 .TE 끝나는 줄에서 kim dany 바꾸고 .tmp 가진 라인은 삭제한다.

/^\.TS/,/^\.TE/{

s/kim/dany/g

/^\.tmp/d

}

c shell 경우는 해석할때 뒤에 백슬래시를 하나 지우기 때문에 스크립트 작성시 백슬래시를 2 입력해야 한다.

sed -e 's/foo/kim\\

dany/g' a1.out

메타문자로써 & 패턴이 매치되는 부분을 가리킨다.

s/unix/hi &/g

이면 sun unix sun hi unix 변경된다.

sed A:B 내용을 B:A 치환할때 \1 \2 매개로 사용한다.

[ec :/usr7/ec/kim]#cat a1.out

first:second

one:two

[ec :/usr7/ec/kim]#sed 's/\(.*\):\(.*\)/\2:\1/' a1.out

second:first

two:one

sed 'y/원본/바꿀문자/' file

y 원본문자를 바꿀문자로 전체에 걸처 적용한다.

h H : 패턴공간을 대기공간으로 h 덮어쓰기 H 붙여쓰기

g G : 대기공간을 패턴공간으로 g 덮어쓰기 G 붙여쓰기

x   : 대기공간과 패턴공간의 내용을 바꾼다.

라인일부분 변환하기, 라인에서 특정 패턴의 문자를 대문자로 출력하기

s/find the Match statiement/fine the MATCH statement/g

#cat sedfile

/the .* statement {

h

s/.*the \(.*\) statement.*/\1/

y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/

G

s/\(.*\)\n\(.*the\).*\( statement.*\)/\2\1\3/

}

-n : sed 라인이 패턴매치가 되지 않는 부분도 기본적으로는 출력을 한다. -n 옵션을 주면 라인매치가 되지 않는 부분은 출력하지 않는다

p : 라인매치 되는 부분 출력하기

q : 입력라인을 읽는 것을 멈추도록 한다. 출력도 멈추게 한다.

[ec :/usr7/ec/kim]#sed '1,10p' a11.out

하면 1줄부터 10 까지만 출력되는 것이 아니라 11 부터 끝줄까지도 출력한다.

[ec :/usr7/ec/kim]#sed -n '1,10p' a11.out

1 부터 10 까지만 출력한다. 11 부터 읽기는 하나 출력을 하지 않을 뿐이다.

[ec :/usr7/ec/kim]#sed '10q' a11.out

1 부터 10 까지만 읽고 11줄부터는 아에 읽지도 않는다.

sed 명령어 문법 정리

일반적인 형식

[address],[address][!] command [arguments]

 

a

지정된 라인뒤에 text 붙인다.

[assress]a\

text

 

c

지정된 라인을 text 바꾼다.

[address1],[address2]c\

text

 

[ec :/usr7/ec/kim]#cat a2

1 kim        dany bloodmess73     korea kim

2 kim        dany bloodmess73     korea kim

3 kim        dany bloodmess73     korea kim

4 kim        dany bloodmess73     korea kim

5 kim        dany bloodmess73     korea kim

6 kim        dany bloodmess73     korea kim

7 kim        dany bloodmess73     korea kim

 

[ec :/usr7/ec/kim]#sed '3,6c\\

kim' a2

1 kim        dany bloodmess73     korea kim

2 kim        dany bloodmess73     korea kim

kim

7 kim        dany bloodmess73     korea kim

 

i

라인 앞에 삽입한다.

[address]i\

text

 

q

라인을 만나면 끝낸다.

[address]q

 

r

파일을 읽어 패턴 공간의 위에 붙인다. r file 사이에 공백이 하나 있어야만 한다.

 

s

지정된 라인을 pattern replacement 치환한다.

[address1],[address2]s/pattern/replacement/flags

flags 내용

n 지정된 라인중 n 번째 등장한 pattern 바꾼다

g 지정된 라인 모두를 바꾼다

p 성공적으로 대치가 이루어진 라인을 출력한다

w file 대치가 이루어지면 라인을 file 적는다. 스크립트에 대해 최대 10개의 파일을 있다.

 

t

지정된 라인에서 치환이 이루어졌는지 테스트 한다.

[address1],[address2]t [label]

 

w

패턴 공간의 내용을 file 붙인다. w file 공백으로 분리된다

[address1],[address2]w file

 

y

문자들을 바꾼다

[address1],[address2]y/abc/xyz/

ax by, cz 바꾼다

스크립트 안에서 변수를 사용하고자 할때는 변수 주위로 작은따옴표를 모두 둘러 쳐야 한다.

sed '/'${username}'/{s/'${endver}'/'${curver}'/}' svn_milti.dat