[편집][shell] ed (line editer) 사용예
ed (line editer)
ed는 간단한 line edit이다. 솔직히 요즘 linux 속에 들어 있는 pico나 vi와
같이 훌륭한 editer들을 두고서 ed를 사용하는 것은 우스울지도 모르겠지만
shell script를 하다 보면 ed의 위력을 상당히 느낄수 있다.
특히 shell script에서 here document 부분에서 사용되어지는 ed 의 위력은
직접 해 보지 않으면 알수가 없을 것이다.
일단 간단한 명령어들 부터 보겠다. ed의 실행은 ed “file name” 으로 실행을 한다.
i : 쓰기 mode로 전환한다. vi의 i 와 같은 역할을 한다.
.(dot) : 쓰기 mode를 마친다.
d : 한 라인을 삭제한다
w : 저장을 한다.
q : ed 를 종료한다.
+ : 한줄아래로 이동을 한다.
– : 한줄 위로 이동을 한다.
, : 첫라인 부터 마지막 라인까지를 지정한다. %로 사용하기도 한다.
; : 현재 라인 부터 마지막 라인까지의 범위를 지정을 한다.
$ : 마지막 라인을 지정한다.
g : global을 의미한다.
s : 대체를 한다.
그럼 위의 명령을 가지고 간단한 문법들을 설명해 보겠다.
g/show/
이것은 file의 전체 내용중에서 show 라는 단어들을 모두 검색하여
출력을 하는 것을 의미한다. 이것의 용도는 아래의 예제들에서 보겠다.
,s/old/new/g
이것은 첫번째 라인에서 부터 마지막 라인까지 모든 old라는 단어를
new로 대체하라는 의미이다. 여기서
,s/old/new/
와의 차이는 아래의 경우에는 모든라인(,)에서 걸리는 첫번째 old를
show로 대체를 하는 차이를 가진다. 즉 모든 old가 아니라는 것이다.
g의 역할은 이렇게 사용이 된다.
이것은 바로 위의 ,s/old/new 와 동일한 의미를 가진다.
또한 범위를 지정하는 방식으로 아래와 같이 사용을 할수가 있다.
(4,$)s/old/new/g
이것은 4번째 line부터 마지막 line까지 모든 old를 new로 대체한다.
대충 이정도의 명령만 알면 here document를 사용하는데 별 무리가 없다.
그럼 이 명령들을 가지고 실제로 변경을 하는 예를 들어 보겠다.
예제 1 )
g/#### $ip $location Start/ -> 일단 #### $ip $location Start 줄을 찾는다.
+ -> 그리고 다음 line으로 이동을 한다.
i -> 이동한 line에서 쓰기 모드로 전환한다.
-> 실질적인 내용이 들어간다. 이 line은 공백라인을 입력한다.
<VirtualHost $ip>
ServerAdmin $user@$dns
ServerName $dns
DocumentRoot $home/docs
ScriptAlias /cgi-bin/ $home/cgi-bin/
ServerAlias *.$dns $dns
CustomLog /var/logs/$dns.access_log common
</VirtualHost>
. -> 쓰기 모드를 마친다.
w -> 저장을 한다.
q -> ed를 종료한다.
예제 2 )
,s/var_dns/$dns/g -> 글 전체의 모든 var_dns를 $dns로 변경한다.
,s/var_mx/$mx/n -> 글전체의 각 line의 n번째 var_mx를 $mx로 변경
w -> 저장을 한다.
q -> 종료를 한다.
g/”WORD”/ 를 사용할때 위와 같이 사용을 하기 위해서는 “WORD”는
유일한 단어여야 한다. 프로그래밍을 할때 변수가 중복이 되지 않는
것처럼 위의 예제는 shell script에서 file에 접근을 할때 사용하는 예일
뿐이다.
ed의 기능은 여기에 나타나 있는 것 보다 훨씬 강력한 명령들이 많이
있다. 단순히 shell script에서 ed를 사용한다면 이정도만 가지고도
충분히 사용을 할수 있지만 더 많은 것을 알고 싶다면 man ed를 하여
살펴 보기를 바란다.
/old/new