정규표현식을 쓰는 이유 중 하나는, 패턴을 찾기 위해서입니다. 그런데, group capture를 해서 가공할 수도 있는데요. 예제를 통해서 알아보도록 하겠습니다. 정규 표현식에 체크한 상태에서, notepad++에서 찾을 내용은 ([0-9]{2,})-([0-9]{3,})-([0-9]{3,})로 입력하였습니다. 입력은 위와 같습니다. 국번이 있는 걸로 보아서는 그냥 전화 번호인 모양입니다. 모두 바꾸기를 눌러 보겠습니다. 그러면 국번만 쏙 뽑혀서 나옴을 볼 수 있어요. 02는 서울, 031은 경기도, 032는 인천이네요. 어떤 원리로 이렇게 뽑혔는가? 천천히 보도록 하겠습니다. 먼저 소괄호로 감싸져 있는 부분이 보이실 텐데요. 이는 캡쳐한다는 것을 의미합니다. 그러면, 캡쳐되는 부분은 위 그림과 같이 될..
regex 검색 결과
저번 시간에는 notepad++를 이용해서, diff를 사용해 보는 것이였습니다. 이번에는 여러 패턴들을 찾고 한번에 바꾸는 것도 해 보도록 하겠습니다. 당연하게도, 패턴들을 찾는 것이니, 공식 문서의 이 부분이 유용할 듯 싶네요. 먼저 CR LF부터 보도록 하겠습니다. 리눅스하고, 윈도우하고 개행 처리 방식이 다릅니다. 윈도우는 LF 앞에 CR이 붙는데, 리눅스는 그렇지 않습니다. 기호 보기에서 특수 문자 표시에 체크를 해 주겠습니다. 그러면 1 뒤에 CR LF가 있고, 2 뒤에 또 CR LF가 있어요. CR은 캐리지 리턴이라 합니다. \r로 표현이 됩니다. 이것이 몇 개나 있는지 찾고 싶습니다. 찾기에서 찾기 모드를 정규 표현식을 선택해 줍시다. 그 다음에 \r\n을 입력하고 일치하는 개수를 누르시면..
c에서 multiple token을 처리하기 위해서 strtok을 이용할 수 있습니다. 자바는 split 로 매우 간단하게 처리할 수 있습니다. 그리고 이 메서드는 정규 표현식을 이용합니다. c++에서는 어떻게 하면 좋을까요? 자바의 split가 정규 표현식을 쓴다는 것에 착안하시면 무엇을 써야 할 지 쉽게 알 수 있습니다. 문자열 s를 ,과 .를 구분자로 나누는 예제를 생각해 보겠습니다. 먼저, delimeter는 . 아니면 ,입니다. 따라서, 이를 정규 표현식으로 표현하면 [.,]입니다. 이것은 scan 집합이 . 아니면 ,라는 의미입니다. 그런데, 이들이 한 번 이상 나오면 어떨까요? 예를 들어, 문자열 ",,"이나, "..,"는 어떤가요? 이런 경우도 match가 되게 하려면 regex의 패턴이 ..
filebeat에서, log 파일을 긁어갈 때 multiline을 설정하는 것이 있습니다. 이번 시간에는 이 중에서 간단하게 pattern만 잘 설정해 보도록 하겠습니다. Filebeat에서 logstash로 보내지 않고, 바로 ElasticSearch로 보냅니다. 로그가 어떻게 elasticsearch에 적재되는지, kibana로 보도록 하겠습니다. log.file.path로 불러 오는군요. 저기서, /home/cho/jo_test/logs는 사실, log가 발생하는 프로그램이, 로그를 저장하는 위치입니다. 해당 프로그램의 logback-spring.xml 파일의 일부입니다. LOG_DIR이 logs 밑으로 잡혀있고, 저는 이 디렉토리 밑에 로그들을 모두 떨굴 겁니다. 제 서버에서는 이 위치에 떨굴 겁..
패턴이 일치하는 내용을 빠르게 찾으려고 할 때, grep 명령어는 자주 쓰는 편입니다. 패턴이라 하면, regex가 들어갈 거 같은데.. 네. 사실 그것을 조금이라도 알면 꿀은 먹을 수 있다는 장점이 있습니다. 작업 속도가 중요한 환경에서는. 눈치 안 보이게 하려면 익혀두는 수밖에 없는 듯 싶어요. file에서 패턴과 일치하는 부분이 있는 행을 결과값으로 내보냅니다. 그런데, 사실 이런 패턴을 생각보다 많이 씁니다. 명령어 1의 결과를 input으로 받아서, grep option pattern을 수행합니다. 예를 들어, ls -ail이 명령어 1이였다면, ls -ail의 결과에, pattern과 일치하는 행을 리턴합니다. 생각보다, 이는 매우 강력한 도구가 될 수 있습니다. 예를 들자면, 프로세스들 중에..
최근댓글