콘텐츠로 건너뛰기
Home » Notepad++ – 특정 패턴의 단어나 문구만 추출하여 정리하기

Notepad++ – 특정 패턴의 단어나 문구만 추출하여 정리하기

최근에 텍스트로 된 CSV, JSON 파일과 엑셀을 모두 사용하면서 지난한 작업을 많이 하고 있는데, 다시금 Notepad++의 덕을 많이 보고 있습니다. 단순히 데이터를 포맷팅하거나, 단순한 찾기/바꾸기 외에도 제품바코드 번호나 주문번호 같은 특정 규격의 정보를 큰 파일에서 추출한다거나, 엑셀 파일에서 칼럼을 복사해와서 컴마로 연결하거나 하는 일을 주로 하게 됩니다. 오늘은 이런 일들을 처리하면서 평소에 잘 쓰지 않다가 익숙해진 몇 가지 기능들을 소개하려고 합니다.

Notepad++는 정규식을 사용하여 검색이나 치환을 할 수 있는 강력한 기능을 갖고 있습니다. 정규식은 보통 특정 패턴에 매치되는 부분을 찾거나 그 부분을 변경하는데 사용하는데요, 특정 패턴에 매치되는 부분만 남기고 나머지를 제거하려면 어떻게 해야할까요?

찾기/바꾸기를 사용한 추출

간단한 예를 들어보겠습니다. 위 스크린샷은 enum 으로 정의된 언어 목록입니다. 이 중에서 L_JSON이 몇 번째에 해당하는지 금방 알아내고 싶습니다. 물론 손가락으로 짚어보면서 하나하나 셀 수도 있겠습니다만, 좀 더 빠르고 깔끔한 방법을 사용하고 싶습니다.

.*?(PATTERN).*$1로 교체하면 PATTERN에 해당하는 부분만 남길 수 있지만, 이렇게하면 위 그림과 같이 한 라인에 패턴에 맞는 문구가 여러 개일 때 첫번째 것만 남게 됩니다. 보다 깔끔하게 정리할 수 있는 방법을 찾아봅시다.

패턴을 제외한 부분을 삭제

패턴을 제외한 부분을 삭제하기 위해서는, 원하지 않는 부분까지 포함한 패턴을 그룹으로 만들고, 다시 그 내부에 원하는 부분을 그룹으로 만듭니다. 이렇게하여 2번 그룹(내부에 있는 원하는 부분)으로 치환하면 되죠. 사실 방식 자체는 위의 예시와 다를 게 없습니다. 다만 패턴의 앞뒤로 .* 를 붙이는 것이 좀 보기 싫어서 다음 방법을 좀 더 선호하는 편입니다.

ctrl+H를 눌러서 바꾸기 대화상자를 엽니다. 그리고 찾을 패턴과 바꿀 패턴에 다음을 각각 입력합니다.

  • 찾을 패턴 : ((L_\w+)|.)
  • 바꿀 내용 : $2\n (앞에 공백이 한 칸 있음)

검색 모드(search mode)에 정규식(regular expression)을 체크한 후, 전체 바꾸기(Replace All) 버튼을 클릭합니다. 이렇게하면 지정한 패턴의 단어들만 남고 나머지 글자는 모두 사라집니다. 대신에 패턴에 해당하지 않는 문자들은 모두 개행문자로 바뀌었기 때문에 빈 줄이 많이 생깁니다. 메뉴에서 Edit > Line Operation > Remove empty lines 를 실행하면 빈 줄이 모두 제거되고 패턴으로 추출한 단어들만 남습니다.

번호 매기기

이렇게 추출한 값 앞에 번호를 매기고 싶다면 Column Editor의 기능을 사용하면 됩니다. (물론 행번호로 대체해도 됩니다…) 어쨌든 앞에서는 각 줄에 번호를 삽입하기 위해서 일부러 공백을 앞에 하나 두고 추출하도록 했습니다.

  1. ctrl+A를 눌러서 전체를 선택합니다.
  2. alt+C를 눌러서 Column Editor를 엽니다. (메뉴 Edit > Column Editor...)

“Number to Insert”를 선택하고 시작값과 증가분을 원하는 대로 입력한 후 OK 버튼을 클릭합니다. 패턴에 일치하는 구문들을 추출하고 번호를 매기게 되었습니다.


파일 전체에서 같은 단어를 한 번에 멀티 선택하기

마우스를 사용해서 드래그하여 단어를 선택할 때, alt 키를 누른채로 선택하면 여러 개의 선택 영역을 만들 수 있습니다. 만약 현재 선택한 영역 혹은 커서가 위치한 단어와 똑같은 모든 단어를 동시에 선택하고 싶다면, Edit > Multi-select All 메뉴를 사용할 수 있습니다. 이 메뉴는 다시 대소문자를 구분할 것인지, 전체 단어로 비교할 것인지 여부에 따라 4가지 선택지로 나뉩니다. 어쨌든 다음과 같은 방법으로 현재 커서가 위치한 단어 혹은 선택한 단어와 같은 단어들을 파일 내에서 한꺼번에 찾아낼 수 있습니다.

  1. 전체 선택하고자하는 단어를 선택하거나, 커서를 그 사이에 갖다놓음
  2. Edit > Multi-select All 하위의 동작을 선택함
  3. 이 때부터 삭제나 변경은 모든 선택된 영역에 똑같이 적용됨

찾기/바꾸기를 사용해서 한 번에 바꾸는 것이 물론 가능합니다만, 찾기/바꾸기와 같이 별도의 팝업창을 띄우는 동작은 notepad++의 매크로를 통해서 녹화할 수 없습니다. 대신 이 방법은 메뉴를 통해서 작동하기 때문에 단축키를 할당해서 사용하거나 매크로를 기록할 때에도 사용할 수 있습니다.

스타일

단어를 편집하지는 않고 단순히 시각적으로 구분해놓고 싶다면, ‘스타일’ 기능을 사용할 수 있습니다. 강조하려는 단어를 선택한 후 Search > Style All Occurrences of Token… 을 선택한 후 스타일(색상)을 선택합니다.(마우스 오른쪽 클릭으로도 설정할 수 있음) 그러면 해당 단어와 똑같은 단어에 강조처리가 됩니다. 이 강조처리는 선택 영역과는 구분되며, 하나의 단어 혹은 모든 단어를 강조처리할 수 있습니다.

각각의 스타일에는 번호가 붙어 있어서, ctrl+번호를 누르면 번호에 해당하는 스타일이 적용되어 있는 바로 다음 위치로 빠르게 이동할 수 있습니다. 특히 아주 긴 JSON 파일에서 특정 키에 스타일을 지정해놓고, 빠르게 훑어볼 때 유용합니다.

스타일과 비슷한 기능으로는 ‘마크’가 있습니다. 마크는 찾기/바꾸기 창의 탭에서 찾을 수 있는데, 특정한 단어 뿐만 아니라 정규식 패턴을 사용할 수도 있습니다.

마크와 스타일을 사용한 추출

마크는 기본적으로 스타일의 일종인 것처럼 취급됩니다. 따라서 마크를 사용하면 F3키를 눌러서 다음 마크로 빠르게 이동할 수 있고, 모든 마크된 스타일을 복사하는 것도 가능합니다. 이 동작을 사용하면 특정 패턴에 매칭되는 내용만 추출하는 것이 쉽습니다.

  1. ctrl+M 을 눌러서 마크 창을 엽니다.
  2. 혹시 이전에 설정된 마크가 아직 있을지도 모르니, Clear all marks 를 먼저 한 번 클릭해줍니다.
  3. 패턴을 입력합니다. 여기서는 추출할 부분의 패턴만 입력하면 됩니다. L_\w+
  4. Mark all 을 선택합니다.
  5. 다시 Copy Marked Text를 클릭하면 마크된 내용을 모두 선택할 수 있습니다.

이제 ctrl+A, ctrl+V를 눌러서 복사한 내용으로 전체 내용을 치환하면 검색된 내용으로만 치환됩니다.

기타

Notepad++의 메뉴 동작의 단축키는 설정을 통해서 수정할 수 있습니다. 예를 들어 현재 선택한 단어와 같은 단어를 찾아서 새로 찾은 단어도 다중 선택하게 하는 명령은 Edit > Multi Search Next > Ignore case & whole word 입니다. 저는 이 기능을 ctrl+G에 할당해서 사용합니다. 그러면 커서가 위치한 단어와 같은 단어를 자동으로 원하는 만큼 찾아서 다중 선택할 수 있습니다. 대신 같은 단어 중에 편집 대상에서 제외하고 싶은 단어가 있을 때에는 ‘Edit > Skip Current & Go to Next Multi Select’를 사용합니다. 이 기능을 ctrl+E에 할당해서 두 개 단축키를 사용해서 다중 편집하고자 하는 단어를 빠르게 선택합니다.

마우스를 이용해서 선택할 때, ctrl 키를 누른 채로 클릭하면 클릭한 곳마다 커서가 추가되면서 다중 편집을 쉽게 할 수 있습니다. 그리고 alt 키를 누른채로 마우스를 드래그하면, 선택 영역이 텍스트를 따라 늘어나지 않고 사각형 영역을 이루면서 늘어납니다. (칼럼 선택 모드) alt 키는 키보드를 이용해서 영역을 선택할 때에도 칼럼 선택 모드로 작동하게 합니다.

끝으로 alt+B, shift+alt+B 는 shift를 누르지 않고 상당히 멀리 떨어진 영역을 정교하게 선택할 수 있도록 도와주는 기능입니다. 예를 들어 특정 영역의 시작 위치에 커서(캐럿)을 두고, shift를 누른 채로 선택하려는 끝 영역을 클릭하면 두 영역 사이가 선택됩니다. 그런데 34행의 첫위치부터 7524행의 끝 위치까지를 선택하려면 shift를 누른 채로 스크롤을 위해서 휠을 아주 많이 돌리거나, pgdn키를 계속 눌러야 합니다. 이런 피곤함을 덜기 위해서는 다음과 같이 합니다.

  1. 시작 위치에 커서를 두고, alt+B를 누릅니다.
  2. 창 하단 상태 표시줄에서 커서 위치를 표시하는 영역을 더블클릭합니다. Go to… 창이 나타나는데 여기서 7524를 입력해서 7524번 행으로 이동합니다.
  3. alt+B를 누릅니다. 그러면 선택 대기 모드(?)가 끝나면서 두 위치 사이가 모두 선택됩니다.

shift+alt+B는 칼럼 선택모드를 사용합니다. 예를 들어 모든 행의 첫 위치에 다중 커서를 두고 싶다면

  1. ctrl+end를 눌러 마지막 행의 끝으로 간 후, home키를 눌러 끝 행의 처음으로 커서를 옮깁니다.
  2. shift+alt+B를 누릅니다.
  3. ctrl+home을 눌러 첫 행의 시작으로 갑니다.
  4. shift+alt+B를 다시 누릅니다.

이렇게 단계를 밟아 나가야 하는 것이 좀 복잡해보이지만, 그렇게 어려운 과정은 아닙니다. 사실 수십 행 정도에서는 직접 커서를 옮기는게 편하게 느껴질 수도 있지만, 수천 라인의 텍스트에서 같은 일을 하려면 이게 더 나은 선택일 수 있습니다. (아니면 한 줄을 편집하고 다음 줄 처음으로 가는 매크로를 녹화한 후 파일 끝까지 반복하도록 해도 됩니다. 방법은 많이 있어요.)

오늘은 나름 유용하다고 생각되는 몇 가지 Notepad++ 팁을 십 몇 년만에 소개해 보았습니다. 뭐, 누군가에게는 조금 도움이 될지도 모르겠네요. 긴 글 읽어주셔서 감사합니다.

댓글 남기기