IT/sed-awk-tr

[sed] vim 특정 줄 주석 처리

심량 2023. 12. 19. 13:52

기록용으로 남깁니다.

 

제가 관리하는 장비의 ~/.vimrc 는 첫번째 줄에 set number 가 있고 19번째 줄에 set nowrap 이 있습니다. 

저는 그 옵션을 매우 싫어 합니다. 그래서 이 옵션들을 .vimrc 의 문법인 " 을 줄 맨 앞에 삽입하여 주석처리하려고 합니다.

 

일일이 vim 으로 열어서 이동 수정 저장하기가 귀찮아서 한 줄 명령을 찾아봤습니다.

 

sed -i -e '1s/^/"/' ~/.vimrc -e '19s/^/"/' ~/.vimrc

 

간단히 설명하면 -i 옵션을 빼면 동작 결과를 화면으로만 보여주고 실제 파일에 반영하지 않습니다. 즉, -i 는 저장 옵션

 

-e 는 여러 동작을 한 줄에서 순서대로 명령하기 위해서 사용합니다. 한마디로 다중 명령용 옵션

 

s 명령은 s/원본/대상/ 의 형태의 문법으로 '원본'을 찾아 '대상'으로 바꾸는(치환) 명령입니다.

이 s 앞에는 적용할 범위가 나옵니다. 아무것도 넣지 않으면 전체 범위에서 동작합니다.

이 예제에서는 1과 19를 각각 사용했습니다. 첫번째 줄과 19번째 줄을 뜻합니다.

 

연속된 줄 선택을 하고 싶으면 1,19 와 같이 하면 1번째 줄부터 19번째 줄까지의 범위에 적용됩니다.

19,$ 와 같이 쓰면 19번째 줄에서 끝 범위까지 적용됩니다.

 

이 s 명령 말고도 p(출력), d(삭제), 찾기(연산자 지정 안하고 /키워드/ 로 둘러싼 명령) 등의 기능이 있습니다.

그 외에 yqhghx 등의 다양한 명령이 있으니 관심이 있으시면 찾아보세요.


참고로 여러번 실행될 때 정확히 1번만 적용되게 하기 위해서 다음과 같이 수정해서 사용했습니다. /etc/vim/vimrc 는 vim 이 이전 편집 위치를 기억해서 불러오는 옵션을 활성화하는 것입니다.

 

sudo sed -i -e 's/^set number/"&/' ~/.vimrc -e 's/^set nowrap/"&/' ~/.vimrc -e 's/^"au /au /' /etc/vim/vimrc