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
$ 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,
'unix and linux' 카테고리의 다른 글
[shell] 널 커맨드(null command) (0) | 2017.01.16 |
---|---|
[shell] 10번째 이상의 매개변수 접근하기 (0) | 2017.01.10 |
ntpd - ntpd 잘못 설치했지만 동작하도록 수정하기 (0) | 2017.01.09 |
[shell] 중첩된 커맨드 대체 (0) | 2017.01.06 |
[shell] 여러 파일의 내용을 반복적으로 실행하기 (0) | 2017.01.06 |