sed에는 저장 기능이 있다. 특정 패턴에 매칭되면 레지스터에 저장할 수 있다. 


마지막 글자를 레지스터 1에 저장하는 예시는 다음과 같다. 모든 문자(.*) 뒤에 (.)$ 를 얻는다. (나 )는 특수 문자라서 \을 필요로 한다. 


$ echo '123456' |  sed 's/.*\(.\)$/\1/'

6



맨 처음 글자를 레지스터 1에 저장하는 예시는 위 예시를 반대로 하면 된다. 


$ echo '123456' |  sed 's/^\(.\).*/\1/'

1



조금 더 앞으로 나아가 맨 처음 2글자를 뽑아보자. ^\(.\)\(.\)를 .*앞에 추가하고 다음 / 뒤에 \1\2를 추가한다. 

레지스터 1,2에 저장된 내용을 그대로 출력하게 한다.


$ echo '123456' |  sed 's/^\(.\)\(.\).*/\1\2/'

12


그 다음에는 처음에서 두 번째 문자를 출력해보자. 저장된 레지스터 2(\2)를 사용한다.


$ echo '123456' |  sed 's/^\(.\)\(.\).*/\2/'

12



다음은 패턴 매칭에 대한 상세 내용을 본다. 
12과 3이 오면 12를 저장한 내용을 레지스터 1에 저장한다. 그런데, 단 한 번만 출력한다. 


$ echo '1231231' | sed 's/\(12\)3/\1/'

121231



계속 패턴을 적용하려면, 마지막에 g를 추가한다. 


$ echo '1231231' | sed 's/\(12\)3/\1/g'

12121



sed에서 /만 사용해서 처음 만난 a를 A로 처음 바꿀 수 있다. 


$ echo 'aaaaaa' | sed 's/a/A/'

Aaaaaa




다섯 번째 a를 A로도 변경할 수 있다. 


$ echo 'aaaaaa' | sed 's/a/A/5'

aaaaAa




모든 a를 A로 바꾸려면 g를 사용한다. 


$ echo 'aaaaaa' | sed 's/a/A/g'

AAAAAA



이제 조금 익숙해졌다면, 재미있는 패턴 매칭으로 구성할 수 있다. 12와 3으로 이루어진 문자는 12----3,으로 나타내게 한다.



$ echo '123123123' | sed 's/\(12\)\(3\)/\1----\2,/g'

12----3,12----3,12----3,



Posted by '김용환'
,