[Splunk] sub-search (하위 검색)

다른 검색의 출력을 사용하여 검색을 매개 변수로 사용이 필요한 경우이다. 예를 들면, 일부 특정 URL을 방문한 IP 주소에서모든 레코드 검색할 때 sub search를 시도할 수 있다.

하위 검색을 이용하지 않으면 다음과 같은 분석을 매우 어렵게 시도해야 한다. 만약 지난 1주일 동안 활동적이었던 사용자의 온라인 구매를 검색하려면 다음과 같은 검색 쿼리를 만들 것이다.
 sourcetype=access_common earliest=-1w | fields + clientip

위와 같이 검색되는 clientip들을 하나하나 이용해서 구매를 분석하게 된다.
sourcetype=access_client_action clientip=123.456.789.123

이런 경우 하위 검색을 이용하면 한번에 분석해낼 수 있다.
sourcetype=access_client_action [search sourcetype=access_common earliest=-1w | fields + clientip]

※ 하위 검색에서 큰 결과 테이블을 반환하는 경우에는 검색 성능에 영향을 미칠 수 있기 때문에 주의해야 한다.

하위 검색 시에 사용할 수 있는 옵션

  • maxout = <integer>
    하위 검색에서 반환할 결과의 최대 수를 지정할 수 있다. 이 숫자는 10,500보다 크건 같을 수 없으며, 기본 값은 100이다.
  • maxtime = <integer>
    하위 검색을 실행하기 위한 최대 시간 (초)이며, 기본 값은 60이다.
  • ttl = <integer>
    지정된 하위 검색의 결과를 캐싱하기 위한 시간이며, 기본 값은 300이다.

 

카테고리: Splunk | 댓글 남기기

Splunk 필드 룩업 (Field Lookup

필드 룩업을 사용하면 이벤트 데이터의 필드와 일치하는 필드를 외부 CSV 파일에서 참조할 수 있다. 이 일치를 사용하면 더 의미있는 정보와 검색 가능한 필드를 이벤트 데이터에 추가하여 데이터를 풍부하게 만들 수 있다.

룩업 파일 업로드

설정> 룩업메뉴를선택한다.
1

Csv 파일로부터 새롭게 생성하기 위해서 룩업 테이블 파일을 선택한다.
1

새롭게 생성하기 위해서 “새로만들기” 버튼을 선택한다.
1

룩업용 csv 파일을 지정한다.
1

필드 룩업 정의

설정> 룩업 메뉴를 선택한다.

룩업 정의를 선택한다.
1

룩업 지정을 위해서 “새로만들기”를 선택한다.
1

다음과 같이 록업 정보를 기록하고 “저장” 버튼을 누른다.
1

이제 Splunk에서 prod_lookup이 파일 기반 룩업이라는 것을 인식한다.

룩업 자동화

설정> 룩업메뉴를 선택한다.

“자동룩업”을 선택한다.
1

필드 지정을 위해서 “새로만들기”를 선택한다.
1

칸들을 채워 필드를 설정한다.
1
입력 필드는 룩업 테이블의 필드와 비교하기 위해 사용하는 이벤트 데이터의 필드이며,  출력 필드는 입력 필드 일치를 기반으로 이벤트 데이터에 추가할 룩업 테이블의 필드이다. 여기서 각 product_id에 대한 가격이 포함되어 있는 price 필드와 각 product_id에 대한 설명 이름이 포함되어 있는 product_name 필드를 추가한다.

다음과 같이 검색의 “필드”란에 추가한 필드가 생성되어 있음을 확인할 수 있다.
1

새 룩업 필드를 사용한 검색
   sourcetype=access_* action=purchase [search sourcetype=access_* action=purchase | top limit=1 clientip | tableclientip] | stats count, values(product_name) AS product_name by clientip | sort -count | rename count AS “How muchdid he buy?”, product_name AS “What did he buy?”, clientip AS “VIP Customer”
이전 하위 검색 예제를 실행하여 VIP 고객이 구입한 내용을 더 명확하게 확인할 수 있다. (product_id 필드를 더 알아보기 쉬운 product_name으로 바꾸어 확인 함)

카테고리: Splunk | 댓글 남기기

Splunk의 시간 표현

검색에서 시간 범위 지정

절대 시간 범위 지정 예

2013년 10월 1일 자정에서 2013년 10월 31일 자정까지의 시간 범위 지정 시
   earliest=10/01/2013:0:0:0 latest=10/31/2013:0:0:0

상대 시간 범위 지정 예

주의 처음부터 현재 시간(지금)까지의 웹 액세스 오류
   eventtype=webaccess error earliest=@w0

현재 업무 주(월요일 -금요일)의 웹 액세스 오류
   eventtype=webaccess error earliest=@w1 latest=@w6

시간 범위

절대 시간 범위 지정

time_modifier 구문은 %m/%d/%Y:%H:%M:%S이다.
예) 2013년 10월 1일자정에서 2013년 10월 31일 자정까지
       earliest=10/01/2013:0:0:0 latest=10/31/2013:0:0:0
       // “earliest” 속성만 지정하는 경우 “latest”는 기본적으로 현재 시간(now)으로 설정된다.

상대시간범위지정

  • 상대 시간을 지정하는 경우 “now”를 사용하여 현재 시간을 나타낼 수 있다.
  • [+|-]<time_integer><time_unit>@<time_unit>을 사용하여 상대 시간 정의한다.
    • 더하기(+) 또는 빼기(-)로 문자열을 시작하여 시간 오프셋을 나타낸다.
    • 숫자 및 단위를 사용하여 시간을 정의하며,단일 시간을 지정하는 경우 숫자가 내포된다. (‘s’는 ‘1s’와 같고 ‘m’은’1m’과 같다.)
  • Splunk에서 지원되는 시간 단위
    s, sec, secs, second, seconds
    m, min, minute, minutes
    시간 h, hr, hrs, hour, hours
    d, day, days
    w, week, weeks, w0, w1, w2, w3, w4, w5, w6 (w0는 일요일, w6은 토요일)
    mon, month, months
    사분기 q, qtr, qtrs, quarter, quarters
    y, yr, yrs, year, years
    지금시간 now
    실시간 검색 시간 간격 rt

맞추기

  • 상대 시간에만 적용 되며, 상대시간의 기준이 된다.
  • 주어진 상대 시간에 내림되는 가장 가깝거나 가장 늦은 시간이 사용되며, 시간 단위를 지정하지 않으면 자동으로 초로 맞춰 진다.
  • “@” 문자로 정의한다.

상대 시간에 대한 예

시간 수정자   설명 결과 시간 동표현
now   지금, 현재시간 2014년 2월 5일 수요일 오후 01:37:05  
-60m   60분 전 2014년 2월5일수요일오후12:37:05 -60m@s
-1h@h   1시간 전, 시간단위 2014년 2월5일수요일오후12:00:00  
-1d@d   어제 2014년 2월4일화요일오전00:00:00  
-24h   24시간 전(어제) 2014년 2월4일화요일오후01:37:05 -24h@s
-7d@d   7일 전, 오늘부터 1주일 전 2014년 1월28일수요일오전00:00:00  
-7d@m   7일전, 분 경계에 맞춤 2014년 1월28일수요일오후01:37:00  
@w0   현재 주의 처음 2014년 2월2일일요일오전00:00:00  
w0   현재 주의 처음 2014년 2월2일일요일오전01:37:05  
+1d@d   내일 2014년 2월6일목요일오전00:00:00  
+24h   지금부터 24시간 후 2014년 2월6일목요일오후01:37:05 +24h@s
@d-2h   오늘 0시에서 2시간을 뺌 2014년 2월4일수요일오후10:00:00  
-mon@mon+7d   1개월 전 첫날에 7일을 더함 2014년 1월8일목요일오전00:00:00  

 실시간 시간 범위 간격 지정

과거 검색의 시간 범위는 검색이 실행될 때 설정된다. 실시간 검색의 경우 시간 범위는 계속 업데이트 된다. 변동하는 데이터 간격, 예를 들어 지난 30초 간격을 나타내는 시간범위를 지정하면, 검색시점부터 첫 30초가 지날 때까지 데이터가 표시되지 않는다.
실시간 검색의 시간 범위는 rt[+|-]<time_integer><time_unit>@<time_unit>와 같이 상대 시간 지정자 앞에 “rt”를 붙이는 점을 제외하고는 과거 검색과 동일한 구문을 따른다.

카테고리: Splunk | 댓글 남기기

Splunk 일반 검색

검색의유형

검색 명령을 통해 키워드, 구, 필드, 부울식 및 비교식을 사용하여 Splunk 인덱스에서 검색할 이벤트를 정확히 지정할수 있다.

  • 키워드: 공백(space)를 구분으로 입력되는 각 검색어
    공백이 있는 경우 모든 검색어들이 포함된 이벤트를 검색한다.(AND 검색)
  • 구: 따옴표로 묶은 검색어
    예) web error와”web error”의 검색 결과는 다르다.
  • 와일드카드: 키워드나 구를 일치시킴
    예) fail* 검색어는 fail, failed, failures등과 일치되어 검색됨
  • 부울식: AND, OR, NOT등의 검색연산자
    예1) web error는 web AND error와 같다.
    예2) Web client error NOT (403 OR 404)
  • 필드식: 검색 대상 필드에 해당하는 값을 검색함
    예1) status = 404 예2) status = 40* // 이 경우400, 401, 402등의 이벤트를 반환함
  • 비교연산자: 특정 값이나 범위를 검색함
    연산자 결과
    = Field=value “value”와 정확하게 일치하는 조건
    != Field!=value “value”와 정확하게 일치하지 않는 조건
    < Field<value “value”보다 작은 숫자 필드 조건
    > Field>value “value”보다 큰 숫자 필드 조건
    <= Field<=value “value”보다 작거나 같은 숫자 조건
    >= Field>=value “value”보다 크거나 같은 숫자 조건

키워드 검색

모든 항목이 검색 대상이다. Splunk에서 검색은 자유롭게 수행할 수 있으며 검색란에 키워드를 입력하고Enter 키를 누르거나 검색란 끝에 있는 녹색 화살표를 클릭해서 검색할 수 있다.

  • 10.2.1.44 // IP가10.2.1.44인 대상을 검색한다.
  • SURPRISE // “SURPRISE” 키워드가 포함된 대상을 검색한다.

부울 연산자  사용

Splunk는 AND, OR 및 NOT을 부울연산자로 사용한다. 검색에 부울식을 포함할 때 연산자는 대문자여야 한다.

  • (SURPRISE AND 10.2.1.114) // SURPRISE와 10.2.1.114가 포함된 경우를 검색한다.
  • (503OR 404) // 503 오류나 404 오류인 경우를 검색한다.
  • (NOT 200) // 200 정상 실행되지 않은 모든 경우를 찾는다.

필드를 사용한 검색

필드는 대부분 값(라인에서 고정된 구분 위치 포함) 또는 이름-값으로, 각 필드 이름에 대한 단일 값이다. 예를 들어, 웹 서버에 액세스하는 IP 주소에 대한 clientip, 이벤트의 타임스탬프에 대한 _time, 그리고 서버의 도메인이름에 대한 host가 있다. 또한 필드는 다중값일 수 있다. 다중값 필드 중 하나로 이메일 주소 필드가 해당하며,”보낸 사람” 필드는 단일 이메일 주소만 포함하는 반면, “받는 사람” 및 “참조” 필드에서는 하나 이상의 이메일 주소를 필드와 연관시킬 수 있다.

  • sourcetype=access_combined_wcookie // sourcetype 필드에서 access_combined_wcookie가 포함된 데이터만 검색한다.
  • sourcetype=access_* AND 404 // sourcetype 필드에서 access로 시작하는 모든 대상 중에서 404가 포함된 데이터만 검색한다.
  • sourcetype=access_* action=purchase // sourcetype 필드에서 access로 시작하고 action 필드에서 purchase가 포함된 데이터만 검색한다.

파이프검색

검색란에 파이프 문자 ” | “를 사용하며, 파이프 왼쪽의 검색 결과를 이 명령의 입력으로 사용할 것임을 나타낸다.

  • sourcetype=access_* action=purchase | top limit=15 clientip // 온라인상점에서가장많이구입한상위15개의ClientIP

검색 예제

문제: 각 고객이 얼마나 많은 꽃을 구입했는가?

  1. 꽃을구입한이벤트검색?
    sourcetype=access_* action=purchase category_id=flowers
  2. 꽃을구입한고객수(unique count)는얼마나되는가?
    $ sourcetype=access_* action=purchase category_id=flowers | stats dc(clientip)
  3. 각고객이얼마나많은꽃을구입했는가?
    sourcetype=access_* action=purchase category_id=flowers | stats count by clientip
  4. 검색결과의형식변경
    sourcetype=access_* action=purchase category_id=flowers | stats count as “#Flowers Purchased” by clientip
  5. Rename 명령을사용한clientip 이름변경
    sourcetype=access_* action=purchase category_id=flowers | stats count as “#Flowers Purchased” by clientip | rename clientip AS Customer

하위 검색

RMDB에서의 하위 검색이란 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다. 서브쿼리는 메인 쿼리가 서브 쿼리를 포함하는 종속적인 관계이다.

// 메인 쿼리
SELECT *
FROM db_table
WHERE table_fk IN (
       // 서브 쿼리
       SELECT table_fk FROM db_table_other )

예를 들어 Player라는 테이블과 Team이라는 Table이 있을 때, ‘KOR’팀의 선수들의 이름을 구하는 SQL은 다음과 같다.

SELECT player_name
FROM Player
WHERE team_id IN (
       SELECT team_id
       FROM Team
       WHERE team_country = “KOR” )

Splunk에서는 search 구문을 이용해서 하위 검색 쿼리를 만들 수 있다.

sourcetype=Player [search sourcetype=Team team_country=”KOR” | table team_id] | field player_name

Splunk에서 하위 검색은 대괄호 안에 포함되어 있으며, 하위 검색 결과를 기본 검색의 인수로 사용한다. 다음은 “가장 많은 항목을 구입한 고객과 해당 고객이 구입한 내용”에 대한 검색을 이용하여 하위 검색의 유용함을 보여 준다.

위 문제를 일반적으로 검색하는 방법이라면 다음과 같다.

  1. Top 명령어를이용하여구입한고객을구한다.
    sourcetype=access_* action=purchase | top limit=1 clientip
    // 가장 많이 구입한 고객이 “12.130.60.5” 임을 확인할 수 있다.
  2. 이 고객의 구입한 내용을 검색한다.
    sourcetype=access_* action=purchase clientip=12.130.60.5 | stats count, values(product_id) by clientip
    // 12.130.60.5 IP를 가진 고객이 구입한 내역을 다시 검색한다.
  3. 다음 IP를 다시 수동 검색하여 구입한 내역을 재 검색해야 한다.

일반 검색으로 검색 시 먼저 검색한 결과를 기록해야 하며,  두 번의검색을 실행해야 한다. 그리고 두번을 계속해서 반복해야 하는 어려움이 있다. 이런 경우 하위 검색을 시도하면 쉽게 해결할 수 있다.

sourcetype=access_* action=purchase [search sourcetype=access_* action=purchase | top limit=1 clientip | tableclientip] | stats count, values(product_id) by clientip

그리고 다음과 같이 label을 붙일 수도 있다.
sourcetype=access_* action=purchase [search sourcetype=access_* action=purchase | top limit=1 clientip | tableclientip] | stats count, values(product_name) AS product_name by clientip | sort -count | rename count AS “How muchdid he buy?”, product_name AS “What did he buy?”, clientip AS “VIP Customer”

동적필드생성

원시 데이터로부터 필드를 동적으로 생성함으로써 검색을 dynamic하게 실행할 수 있다. Knowledge module에 의해서 정의만 저장되며 indexing은 그대로 유지된다. (DB는 필드 변경시 원데이터와 새로 mapping해야하는 어려움이 있다.)

동적필드생성방법

  1. i부분의화살표–> 필드추출을선택한다.1
  2. (오른쪽 영역) 샘플 이벤트 영역에서 필드 정의하고 싶은 값들을마우스로 범위 지정하고, (왼쪽 영역) 필드에 대한 예제 값 부분에 붙여 넣는다. (유일한 값으로 잘 선택했다면 2~3개 정도도 가능함) 그리고 생성 버튼을 눌러서 필드명을 지정한다.23

검색결과의저장

보고서 추가 방법

12

Dashboard 추가 방법

1. 검색 버튼 상단의 “다른 이름으로 저장”을 누른 후 “대시보드 패널”을 선택한다.

1

2. 대시보드에 대한 설정 사항을 입력한다.

2

3. “ChartTest” 이름의 대시보드가 등록되어 있음을 확인할 수 있다.

3

4. “ChartTest” 리스트를 누르면 바로 결과 조회가 가능하다.

4

검색보고서

보고서 생성 및 검색 결과의 요약에 도움이 되도록 보고 명령을 검색 문자열에 직접 추가할 수 있다.

  • chart: 모든 데이터 열을 표시할 수 있는 차트를 만드는 데 사용되며 차트의 x축에 표시할 필드 설정이 가능하다.
  • timechart: “시간에 따른 동향” 보고서를 만드는 데 사용되며 _time이 항상 x축이다.
  • top: 필드의 최대 공통 값을 표시하는 차트 생성
  • rare: 필드의 최소 공통 값을 표시하는 차트 생성
  • stats, eventstats 및 streamstats: 요약 통계를 표시하는 보고서 생성
  • associate, correlate 및 diff: 데이터 내 필드 사이의 연관, 상관 및 차이를 확인할 수 있는 보고서 생성

chart, timechart, stats, eventstats 및 streamstats는 모두 통계 함수와 함께 사용가능하며가능한 통계 함수는 다음과 같다.

  • count, distinct count
  • mean, median, mode
  • min, max, range, percentiles
  • standard deviation, variance
  • sum
  • first occurrence, last occurrence

명령어

Chart

검색어 예: error* | chart count by file
1

2

TimeChart

시계열 차트 -x축이 시간인 그래프
검색어 예: * | timechart count by file1

검색어 예: * | timechart count
2

Trendline

이동 평균 – 시점에 대해서 최근 n일 간의 평균
검색어 예: * | timechart count by file
1

Predict

예측 – 값들이 어떻게 변할 지 예상치를 구함
검색어 예: * | timechart count | trendline sma3(count) as “SMA” | predict count as forcast algorithm=LL upper90=high lower97=low future_timespan=10 holdback=10
(10개 정도 앞을 예측하는 예)
1

카테고리: Splunk | 댓글 남기기

정규 표현식

정규 표현식 (regular expression)

  • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식언어
  • 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해서 지원하고 있음

문자지정 . 사용예제

. 은 아무 문자나 1개를 가리킨다.하지만 “줄바꿈 문자(\n)”는 제외된다.[.]

  • Find h.t
  • Replace 123
  • Source hat halt hit heat hot
    • Result 123 halt 123 heat 123
  • Find h..t
  • Replace 1234
  • Source hat halt hit heat hot
    • Result hat 1234 hit 1234 hot

문자지정 [ ] 사용예제

[ ] 은 그 안에 있는 문자중 아무것 1개를 가리킨다.[a-z] [A-Z] [a-zA-Z] [a-zA-Z0-9]
[abc] a,b,c 중 아무것이나 1개
[1234] 1,2,3,4 중 아무것이나 1개
[a-z] 알파벳 소문자 중 아무것이나 1개
[A-Z] 알파벳 대문자 중 아무것이나 1개
[0-9] 숫자 중 아무것이나 1개
[a-zA-Z] 알파벳 소문자나 대문자 중 아무것이나 1개
[a-zA-Z0-9_] 알파벳, 숫자, 밑줄문자 중 아무것이나 1개

  • Find h[aiu]t
  • Replace 123
  • Source hat het hit hot hut
    • Result 123 het 123 hot 123

문자지정 [^ ] 사용예제

[^ ] 은 그 안에 있는 문자를 제외한 문자중 아무것 1개를 가리킨다.[^a-zA-Z0-9][^0-9]
[^abc] a,b,c 이외의 문자 중 아무것이나 1개
[^1234] 1,2,3,4 이외의 문자 중 아무것이나 1개
[^a-z] 알파벳 소문자 이외의 문자 중 아무것이나 1개
[^A-Z] 알파벳 대문자 이외의 문자 중 아무것이나 1개
[^0-9] 숫자 이외의 문자 중 아무것이나 1개
[^a-zA-Z] 알파벳 소문자나 대문자 이외의 문자 중 아무것이나 1개
[^a-zA-Z0-9_]알파벳, 숫자, 밑줄문자 이외의 문자 중 아무것이나 1개

  • Find h[^aiu]t
  • Replace 123
  • Source hat het hit hot hut
    • Result hat 123 hit 123 hut

개수지정 * 사용예제

*은 바로 앞에 있는 문자가 0개또는 그 이상 있는 것을 가리킨다.{0,}과 같은 의미이다.[expres*ions]

  • Find ha*t
  • Replace 123
  • Source ht hit hat hot haat hut haaaaat
    • Result 123 hit 123 hot 123 hut 123

개수지정 + 사용예제

+ 은 바로 앞에 있는 문자가 1개또는 그 이상 있는 것을 가리킨다. {1,}과 같은 의미이다.[expres+ions]

  • Find ha+t
  • Replace 123
  • Source ht hit hat hot haat hut haaaaat
    • Result ht hit 123 hot 123 hut 123

개수지정 ? 사용예제

? 은 바로 앞에 있는 문자가 0개 또는 1개 있는 것을 가리킨다. {0,1}과 같은 의미이다.[expres?ions]

  • Find ha?t
  • Replace 123
  • Source ht hit hat hot haat hut haaaaat
    • Result 123 hit 123 hot haat hut haaaaat

개수지정 {n} 사용예제

{n} 은 바로 앞에 있는 문자가 n개 있는 것을 가리킨다.[expres{2}ions]

  • Find ha{2}t
  • Replace 123
  • Source ht hit hat hot haat hut haaaaat
    • Result ht hit hat hot 123 hut haaaat

개수지정 {n,} 사용예제

{n,} 은 바로 앞에 있는 문자가 n개 이상 있는 것을 가리킨다.[expres{2,}ions]

  • Find ha{2,}t
  • Replace 123
  • Source ht hit hat hot haat hut haaaaat
    • Result ht hit hat hot 123 hut 123

개수지정 {n,m} 사용예제

{n,m} 은 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것을 가리킨다.[expres{1,2}ions]

  • Find ha{2,4}t
  • Replace 123
  • Source ht hat haat haaat haaaat haaaaat
    • Result ht hat 123 123 123 haaaaat

개수지정 Greedy방식과 Lazy방식

문자 개수를 지정하는 방법은 크게 Greedy방식과 Lazy방식으로 나뉘어진다.
Greedy 방식은 욕심이 많아서 가능한 최대의 것을 선택한다.
Lazy방식은 게을러서 가능한 최소의 것을 선택한다.
Greedy 방식뒤에 ?을 붙이면 Lazy방식이 된다.

  • * *?
    • * 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는것중, 가능한 최대의 것
    • *? 은 Lazy 방식으로, 바로 앞에 있는 문자가 0개 또는 그 이상 있는 것 중, 가능한 최소의 것
  • + +?
    • +은 Greedy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최대의 것
    • +? 은 Lazy 방식으로, 바로 앞에 있는 문자가 1개 또는 그 이상 있는 것 중, 가능한 최소의 것
  • ? ??
    • ? 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 1개 있는 것 중, 가능한 최대의 것
    • ?? 은 Greedy 방식으로, 바로 앞에 있는 문자가 0개 또는 1개 있는 것 중, 가능한 최소의 것
  • {n} {n}?
    • {n} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 있는 것
    • {n}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 있는 것
  • {n,} {n,}?
    • {n,} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 이상 있는 것 중, 가능한 최대의 것
    • {n,}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 이상 있는 것 중, 가능한 최소의 것
  • {n,m} {n,m}?
    • {n,m} 은 Greedy 방식으로, 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것 중, 가능한 최대의 것
    • {n,m}? 은 Lazy 방식으로, 바로 앞에 있는 문자가 n개 이상, m개 이하 있는 것 중, 가능한 최소의 것

Find <.*>
Replace 123
Source Regex <b>Greedy</b> Style
          Regex <i>Lazy</i> Style
Result Regex 123 Style
          Regex 123 Style
====================================
<.*> 과 일치하는것 : <로 시작하고, 중간에 아무 문자나 0개 이상 들어있고, >로 끝나는 것 중, 가능한 최대의것 – <b>Greedy</b>, <i>Lazy</i>

Find <.*?>
Replace 123
Source Regex 123Greedy123Style
          Regex <i>Lazy</i> Style
Result Regex 123Greedy123 Style
          Regex 123Lazy123 Style
====================================
<.*?> 과 일치하는것 : <로 시작하고, 중간에 아무 문자나 0개 이상 들어있고, >로 끝나는 것 중, 가능한 최소의것 – <b>, </b>, <i>, </i>

위치지정 ^ 사용예제

^ 은 줄의 제일 처음을 가리킨다.

  • Find ^h.t
  • Replace 123
  • Source hat hit hot
    • Result 123 hit hot

위치지정 $ 사용예제

$ 은 줄의 제일 마지막을 가리킨다.[있다.] [있다.$]

  • Find h.t$
  • Replace 123
  • Source hat hit hot
    • Result hat hit 123

한줄전체 선택 ^.*$ 사용예제

^.*$ 은 줄 처음과 끝사이에 아무 문자나 0개 이상 있는것을 의미하므로, 결과적으로 한 줄 전체를 가리킨다. [^.*$] (아무것도 없는 빈 줄도 해당된다.)

  • Find ^.*$
  • Replace 123
  • Source Regular Expressions
              Greedy Style
              Lazy Style
  • Result 123
            123
            123

Group지정 ( ) 사용 예제

( ) 은 Group을지정할때사용되며, Group은개수지정패턴과 함께사용될때, 한개의 문자 처럼 취급된다.

  • Find ba(na)*
  • Replace 123
  • Source ba na bana banana nana bananana
    • Result 123 na 123 123 nana 123
  • Find ba(na)+
  • Replace 123
  • Source ba na bana banana nana bananana
    • Result ba na 123 123 nana 123

OR 선택 지정 ( | ) 사용 예제

( | ) 은 | 으로 나뉘어진 여러개의 Pattern중에서 하나와 일치하는 것을 가리킨다.

  • Find (eg|sa|be)g
  • Replace 123
  • Source egg eng sag sig beg bag
    • Result 123 eng 123 sig 123 bag

주요Escape 문자 목록

  • \u0020        16진수 Unicode 문자, 항상 4자리로 사용
  • \x20        16진수 ASCII 문자, 항상 2자리로 사용
  • \t        탭 문자, Tab, \u0009
  • \r        줄 바꿈 문자, Carriage Return, \u000D
  • \n        줄 바꿈 문자, Line Feed, \u000A
  • \s        공백 문자, White-Space Character, \t \r \n 스페이스 포함
  • \S        \s 이외의 문자
  • \d        숫자, [0-9] 과 같은 의미
  • \D      \d 이외의 문자, [^0-9] 과 같은 의미
  • \w      Word Character, [a-zA-Z0-9_] 과 한글 일본어 중국어 등의 유니코드 문자 포함
  • \W        \w 이외의 문자
  • \b        [ ] 안에서 사용될 때는 백스페이스 문자, Backspace, \u0008
                [ ] 밖에서 사용될 때는 \w 과 \W 사이의 경계, Word Boundary
              Replace Pattern에서 사용될 때는 항상 백스페이스 문자
  • \\        \문자 자체를 가리킬 때 사용
                비슷한 사용법 \. \* \+ \? \^ \$ \( \) \{ \} \[ \]

줄바꿈 문자 \r\n 사용예제

.NET기반의 정규식 도구는 많이 있지만, Replace Pattern에서 \r 나 \n 같은 Escape Squence 문자를 정확하게 다루는 도구는 eLiner가 거의 유일하다.

다른 .NET기반의 정규식 도구들은 대부분 Find Pattern에서는 Escape Sequence 문자를 잘 다루지만, Replace Pattern에서는 Escape Sequence 문자를 제대로 다루지 못한다.

  • Find <br>
  • Replace \r\n
  • Source spring<br>summer<br>fall<br>winter
    • Result spring
              summer
              fall
              winter

Splunk 정규식 예

$ sourcetype=”SEARCH_REQ” | regex SEARCH_RESULT=”\w{5,}”
          | head 10000 | stats count by SEARCH_RESULT | sort-count | head 10

$ sourcetype=”SEARCH_REQ” | rex field=DEVICE_CP_INFO max_match=100 “(?<A_CP>\w+):”

카테고리: Splunk | 댓글 남기기