2020년 5월 12일 화요일

VIM 꼼수의 발견 - 7th

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


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


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


이럴 때 흔히 쓰이는 꼼수

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


② 0 -> 1 치환


③ 11 -> 0 치환


이게 귀찮다면?

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

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


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


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

관련 글

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스