> ## Content Index
> Fetch the complete content index at: https://www.popit.kr/llms.txt
> Use this file to discover other available public pages before exploring further.

# VIM 치환 꼼수?
- URL: https://www.popit.kr/vim-substitution-tricks/
- Published: 2020-04-26T12:02:04.000Z
- Updated: 2020-04-27T08:40:10.000Z
- Author: 강 명훈
- Tags: vim, #팁

0과 1로 구분된 데이터가 있다. 그런데 이상하게 구분값 1은 0, 0은 1로 바꾸고 싶네?

[](https://1.bp.blogspot.com/-8HTVibfLVFQ/XqKu4uclraI/AAAAAAAAJYw/2ekefAvJGmYlzP0yPdEdIdJHM82ypjmYgCLcBGAsYHQ/s1600/vim%5Fsubmatch0.png?ref=popit.kr)

치환 명령어 '%s/1$/0/'와 '%s/0$/1/'를 순서대로 실행하면 1 -> 0, 0 -> 1로 바뀔까?

[](https://1.bp.blogspot.com/-5vsrVI%5FMkIQ/XqKu4XU0yVI/AAAAAAAAJYs/FHuKika5sH40ZaLM16gniWPvrFkHTmOzACLcBGAsYHQ/s1600/vim%5Fsubmatch1.png?ref=popit.kr)

첫 번째 작업에서 1이 사라지고 0만 남기 때문에, 결과적으로 마지막엔 1만 남는다.

[](https://1.bp.blogspot.com/-iGMVAAU4On0/XqKu493h9TI/AAAAAAAAJY0/HBfKWNTOsm4Rzd7BMWTWC9Tiunjj471PACLcBGAsYHQ/s1600/vim%5Fsubmatch2.png?ref=popit.kr)

**이럴 때 흔히 쓰이는 꼼수**

① 0 -> 1 치환 시 중복을 막기 위해 1 -> 11로 잠시 피신.

[](https://1.bp.blogspot.com/-lIOsK1bA6l8/XqZGpd1gMNI/AAAAAAAAJcU/cdvsqZysr8QY4yNiIRNmjbpf36fp9MDbgCLcBGAsYHQ/s1600/submatch5.png?ref=popit.kr)

② 0 -> 1 치환

[](https://1.bp.blogspot.com/-3VBn74PARc0/XqZGpVdokZI/AAAAAAAAJcQ/oWWgfugXOgEdwzMjbbgMq2SdVtoqaRWHwCLcBGAsYHQ/s1600/submatch6.png?ref=popit.kr)

③ 11 -> 0 치환

[](https://1.bp.blogspot.com/-8pyxM8Zj8Zs/XqZGpSpTEnI/AAAAAAAAJcY/c5eQo-PBqjosQ15JYl1GjprVneZBjEDYgCLcBGAsYHQ/s1600/submatch7.png?ref=popit.kr)

**이게 귀찮다면?**

구글신께 물어봤다. 오\~ 조건 치환이 가능하단다.

- [Conditional replace in vim](https://stackoverflow.com/questions/17337979/conditional-replace-in-vim?ref=popit.kr)

① 정규표현식 '\[01\]$'을 이용해서 줄 끝에 위치한 0과 1을 검색  
② '\\=' 이후 표현식은 전체 검색 결과인 submatch(0)가 0이면 1로, 아니면 0으로 치환

[](https://1.bp.blogspot.com/-eAsZi0J9dI8/XqKu5dhab2I/AAAAAAAAJY4/-x-Q-UhYbfsIugQF9YviM3Fsuz7fNKfDACLcBGAsYHQ/s1600/vim%5Fsubmatch3.png?ref=popit.kr)

산술 연산도 가능하다. 다음은 검색 결과가 0이면 +100, 아니면 \*10을 한 결과.

[](https://1.bp.blogspot.com/-If91qSche8g/XqKu5lyClPI/AAAAAAAAJY8/lFSG79C6g7At4oy9Y13K54T3rW9fmRihwCLcBGAsYHQ/s1600/vim%5Fsubmatch4.png?ref=popit.kr)

꼼수라 부르기 좀 미안하네(..)