5.문자열 함수

Edit

5.1concat()

여러 개의 문자열을 결합하여 하나의 문자열로 만듭니다. 문자열이 아닌 표현식의 경우 문자열로 변환 후 결합됩니다.

문법

concat(EXPR1, EXPR2[, ...])
EXPR1, EXPR2[, ...]

문자열을 반환하는 표현식을 쉼표(,)로 구분하여 입력합니다. 표현식이 반환하는 문자열을 모두 하나의 문자열로 결합합니다.

사용 예

json "{}" 
| eval str=concat("hello", ", ", "world")
  => "hello, world"

5.2contains()contains()

대상 문자열이 특정 부분문자열을 포함하는지 여부를 반환합니다.

문법

contains(STR_EXPR, SEARCH_STR)
STR_EXPR

문자열 표현식을 지정합니다.

SEARCH_STR

STR_EXPR의 문자열 값에 포함되어 있는지 확인할 문자열을 지정합니다.

사용 예

json "{}" | eval isInclude=contains("foo", "o") => true

json "{}" | eval isInclude=contains("bar", "o") => false

json "{}" | eval isInclude=contains("baz", null) => false

json "{}" | eval isInclude=contains(null, null) => false

5.3format()format()

주어진 인자들을 이용해 만들어진 새 문자열을 반환합니다.

문법

format(STR_FMT, {PARAM_1[, PARAM_2, ...]|ARRAY_EXPR})

STR_FMT

형식 지시자를 포함한 형식 문자열을 지정합니다.

{PARAM_1[, PARAM_2, ...]|ARRAY_EXPR}

주어진 형식으로 문자열을 표현하는데 이용될 입력값을 지정합니다. 배열을 반환하는 표현식(예: array(), groups()를 이용하는 표현식)을 이용해 형식 문자열에 적용할 인자를 반환하도록 지정할 수 있습니다.

사용 가능한 형식 지시자는 다음 주소에 있는 Class Formatter 문서를 참고하십시오
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html

사용 예

json "{}" 
| eval str=format("date: %04d-%02d-%02d", 2004, 3, 29)
  => "date: 2004-03-29"

json "{}"  
| eval  str=format("%3$s-%1$s-%2$s", groups("Mar 29 2004", "(.*?) (.*?) (.*)"))
  => "2004-Mar-29"

5.4guid()guid()

항상 유일한 GUID 문자열 값을 생성하여 반환합니다.

문법

guid()

사용 예

guid() => "a1189dda-870e-4aea-8742-76dcb8398b49"

5.5indexof()indexof()

문자열에서 특정한 문자열의 시작 위치를 검색합니다. 검색할 문자열을 찾을 수 없으면 -1을, 검색 대상 문자열이나 문자열에서 검색할 문자열이 null이면 null을 반환합니다.

문법

indexof(STR_EXPR, SEARCH_EXPR[, BEGIN_EXPR])
STR_EXPR

문자열 표현식을 지정합니다.

SEARCH_EXPR

STR_EXPR의 문자열 값에 포함되어 있는지 확인할 문자열을 지정합니다.

BEGIN_EXPR

검색을 시작할 위치 인덱스를 지정합니다. 위치를 나타내는 인덱스는 '0'부터 시작합니다. 지정된 위치부터 SEARCH_EXPR 값을 찾습니다.

사용 예

indexof("hello world", "world") => 6
indexof("hello world", "foo") => -1
indexof("hello world", null) => null
indexof(null, "world") => null
indexof(null, null) => null
indexof("hello world", "o", 5) => 7

5.6kvjoin()kvjoin()

모든 키와 값을 결합해 하나의 문자열을 만듭니다.

문법

kvjoin(KEY_VALUE_SEP, PAIR_SEP[, REGEX])
KEY_VALUE_SEP

키와 값을 구분하는 문자를 지정합니다.

PAIR_SEP

각 키/값 쌍들을 구분하는 문자를 지정합니다.

REGEX

키가 정규표현식과 일치하는 경우만 키와 값을 결합합니다. 지정하지 않으면 모든 키/값 쌍을 결합합니다.

사용 예

1) 키/값 구분자는 콜론(:)으로, 키/값 쌍 구분자는 ^을 사용해 문자열 결합

json "{}" 
| eval name="Kim", age=30 
| eval result=kvjoin(":", "^") => "name:Kim^age:30"

2) src.* 정규표현식과 일치하는 필드만 추출하여 키/값 구분자는 콜론(:), 쌍 구분자는 ^을 사용해 문자열 결합

json "{'src_ip':'1.2.3.4', 'src_port':45667, 'dst_ip':'5.6.7.8', 'dst_port':80, 'protocol':'TCP'}" 
| eval result=kvjoin(":", "^",  "src.*") => "src_ip:1.2.3.4^src_port:45667"

5.7left()left()

문자열에서 지정한 길이만큼 왼쪽부터 문자열 잘라서 반환합니다. 지정된 길이보다 문자열의 길이가 짧으면 문자열 전체를 반환합니다. 인자가 null이면 null을 반환하고, 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

left(STR_EXPR, CHAR_LENGTH)

STR_EXPR

문자열 표현식

LENGTH

입력한 개수만큼 문자열의 왼쪽부터 문자를 잘라서 반환합니다. '0' 이상의 상수만 입력할 수 있습니다.

사용 예

left("0123456789", 4) => "0123"
left("0123456789", 11) => "0123456789"
left("0123456789", 0) => ""
left(1234, 2) => "12"
left(1.23, 3) => "1.2"
left(null, 3) => null

5.8len()len()

문자열의 길이를 반환합니다. 인자가 null이면 0을 반환하고, 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

len(STR_EXPR)
STR_EXPR

문자열 표현식

사용 예

json "{}" | eval length=len("sample") => 6

json "{}" | eval length=len(null) => 0

json "{}" | eval length=len(123) => 3

json "{}" | eval length=len(1.2) => 3

5.9lower()lower()

문자열을 소문자로 변환합니다. 인자가 null이면 null을 반환합니다. 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

lower(STR_EXPR)
STR_EXPR

문자열 표현식

사용 예

json "{}" | eval str=lower("Hello World") => "hello world"
json "{}" | eval str=lower(1234) => "1234"
json "{}" | eval str=lower(null) => null

5.10lpad()lpad()

문자열의 왼쪽에 패딩문자를 삽입하여 주어진 길이의 문자열을 만듭니다. 인자가 null이면 0을 반환하고, 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

lpad(STR_EXPR, OUTPUT_LENGTH, [PADDING_EXPR])
STR_EXPR

문자열 표현식

OUTPUT_LENGTH

반환할 문자열의 길이 표현식. STR_EXPR 값이 OUTPUT_LENGTH보다 길면 OUTPUT_LENGTH에 맞춰 문자열을 잘라서 반환합니다.

PADDING_EXPR

문자열의 왼쪽에 채울 문자열 표현식. 지정하지 않으면 공백문자로 채웁니다.

사용 예

json "{}" | eval lpadded=lpad("string", 10) => "     string"

json "{}" | eval lpadded=lpad("string", 10, "p") => "ppppstring"

json "{}" | eval lpadded=lpad("string", 10, "pad") => "padpstring"

json "{}" | eval lpadded=lpad("string", 3, "pad") => "str"

json "{}" | eval lpadded=lpad("string", null, "pad") => null

json "{}" | eval lpadded=lpad("string", 3, null) => null

5.11replace()replace()

문자열에서 주어진 패턴을 모두 찾아 지정한 문자열로 변경해 반환합니다.

문법

replace(STR_EXPR, PATTERN, REPLACE_WITH_THIS[, REGEX_FLAG])
STR_EXPR

원본 문자열 표현식

PATTERN

검색할 문자열. REGEX_FLAG"re"를 지정하면 정규표현식 패턴을 입력합니다.

REPLACE_WITH_THIS

매칭된 문자열과 바꿀 문자열

REGEX_FLAG

정규표현식 패턴 플래그로 "re"를 입력하면 정규표현식을 이용해 패턴 검색

사용 예

json "{}" 
| eval new=replace("hello world", "world" , "logpresso")
  => "hello logpresso"

json "{}" 
| eval new=replace("123412345", "12" , "!")
  => "!34!345"

json "{}" 
| eval new=replace("google", "^g" , "b", "re")
  => "boogle"

json "{}" 
| eval
  new=replace(
    "A:2 B:3 C:5 hahaha A:12 B:13 C:15",
    "A:(\\d+) B:\\d+ C:(\\d+)",
    "$1 $2 \\$1", "re"
  )
  => "2 5 $1 hahaha 12 15 $1"

5.12right()right()

문자열에서 지정한 길이만큼 오른쪽부터 문자열을 잘라서 반환합니다. 지정된 길이보다 문자열의 길이가 짧으며 문자열 전체를 반환합니다. 인자가 null이면 null을 반환하고, 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

right(EXPR, LENGTH)
STR_EXPR

원본 문자열

LENGTH

입력한 개수만큼 문자열의 오른쪽부터 문자를 잘라서 반환합니다. 지정된 길이보다 문자열의 길이가 짧은 경우 문자열 전체를 반환합니다. '0' 이상의 상수만 입력할 수 있습니다.

사용 예

json "{}" 
| eval right=right("0123456789", 4)
  => "6789"

json "{}" 
| eval right=right("0123456789", 11)
  => "0123456789"

json "{}" 
| eval right=right("0123456789", 0)
  => ""

json "{}" 
| eval right=right(1234, 2)
  => "34"

json "{}" 
| eval right=right(1.23, 3)
  => ".23"

json "{}" 
| eval right=right(null, 3)
  => null

5.13rpad()rpad()

문자열의 오른쪽에 패딩 문자를 삽입하여 주어진 길이의 문자열을 만듭니다. 인자가 null이면 '0'을 반환하고, 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

lpad(STR_EXPR, OUTPUT_LENGTH, [PADDING_EXPR])
STR_EXPR

원본 문자열 표현식

OUTPUT_LENGTH

반환할 문자열의 길이 표현식. STR_EXPR 값이 OUTPUT_LENGTH보다 길면 OUTPUT_LENGTH에 맞춰 문자열을 잘라서 반환합니다.

PADDING_EXPR

문자열의 오른쪽에 채울 문자열 표현식. 지정하지 않으면 공백문자로 채웁니다.

사용 예

json "{}" 
| eval rpadded=rpad("string", 10)
  => "string     "

json "{}" 
| eval rpadded=rpad("string", 10, "p")
  => "stringpppp"

json "{}" 
| eval rpadded=rpad("string", 10, "pad")
  => "stringpadp"

json "{}" 
| eval rpadded=rpad("string", 3, "pad")
  => "str"

json "{}" 
| eval rpadded=rpad("string", null, "pad")
  => null

json "{}" 
| eval rpadded=rpad("string", 3, null)
  => null

5.14split()split()

원본 문자열에서 특정 문자열을 제거하고 나머지 문자열을 배열로 반환합니다.

문법

split(STR_EXPR, DELIMITER_EXPR)
STR_EXPR

원본 문자열 표현식

DELIMITER_EXPR

STR_EXPR에서 배열 요소 구분자로 사용할 문자열. 검색된 문자열을 구분자로 하여 문자열들을 분리합니다.

사용 예

json "{'url': 'ko.logpresso.com/documents'}" 
| eval array=split(field("url"), "/")
  => ["ko.logpresso.com", "documents"]

json "{}" 
| eval array=split("logpresso", "a")
  => ["logpresso"]

json "{}" 
| eval array=split("a,b,c,d", ",")
  => ["a","b","c","d"]

5.15strjoin()strjoin()

주어진 배열을 지정된 구분자로 구분된 하나의 문자열로 병합합니다.

문법

strjoin(DELIMIT_CHAR, ARRAY)
DELIMIT_CHAR

배열 요소를 병합할 때 각 요소의 구분자로 사용할 문자열 상수. 구분자에 상수가 아닌 표현식이 들어오면 문법 오류가 발생합니다.

ARRAY

요소를 병합할 배열 표현식. 배열이 null이면 null을 반환하고, 배열의 요소가 null일 때에는 병합된 문자열에 null이 표시됩니다.

사용 예

json "{}" | eval merged=strjoin(",", null)
  => null

json "{}" | eval merged=strjoin(",", array(1, 2, 3))
  => "1,2,3"

5.16substr()substr()

원본 문자열에서 지정된 위치의 문자열만 반환합니다. 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

substr(STR_EXPR, B_INDEX[, E_INDEX])
STR_EXPR

원본 문자열 표현식. 표현식이 null이면 null을 반환합니다.

B_INDEX

반환할 문자열의 시작 문자 인덱스로, 인덱스는 '0'부터 시작합니다. 음수일 경우 문자열의 끝에서부터 계산합니다. 시작 위치가 문자열 길이보다 크면 null을 반환합니다.

E_INDEX

반환할 문자열의 마지막 문자 인덱스. 인덱스는 '0'부터 시작합니다. 생략하면 문자열 끝을 의미합니다. 음수일 경우 문자열끝에서부터 위치를 계산합니다. 끝 위치가 문자열 길이보다 크면 시작 위치부터 문자열 끝까지 반환합니다.

사용 예

json "{}" | eval partion_str=substr("0123456789", 2)
  => "23456789"

json "{}" | eval partion_str=substr("0123456789", -2)
  => "89"

json "{}" | eval partion_str=substr("0123456789", 0, 3)
  => "012"

json "{}" | eval partion_str=substr("0123456789", 4, 12)
  => "456789"

json "{}" | eval partion_str=substr("0123456789", 5, 5)
  => ""

json "{}" | eval partion_str=substr("0123456789", 10, 11)
  => null

json "{}" | eval partion_str=substr("0123456789", -1, 11)
  => "9"

json "{}" | eval partion_str=substr(null, 0, 3)
=> null

5.17trim()trim()

문자열의 좌우에서 공백 문자(탭, 개행 포함)를 제거합니다. 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

trim(STR_EXPR)
STR_EXPR

원본 문자열 표현식. 표현식이 null이면 null을 반환합니다.

사용 예

json "{}" | eval trimed=trim(" hello world ")
  => "hello world"

json "{}" | eval trimed=trim(123)
  => "123"

json "{}" | eval trimed=trim(null)
  => null

5.18upper()upper()

문자열을 대문자로 변환합니다. 문자열이 아닌 값을 받으면 문자열로 변환한 다음 평가합니다.

문법

upper(EXPR)
STR_EXPR

원본 문자열 표현식. 표현식이 null이면 null을 반환합니다.

사용 예

json "{}" | eval UPPER=upper("Hello World")
  => "HELLO WORLD"

json "{}" | eval UPPER=upper(1234)
  => "1234"

json "{}" | eval UPPER=upper(null)
  => null

5.19urldecode()urldecode()

주어진 URL을 디코드하여 반환합니다. 예를 들어 %20은 공백으로 변환됩니다.

문법

urldecode(STR_EXPR[, CHARSET])
STR_EXPR

원본 문자열 표현식. 표현식이 null이면 null을 반환합니다.

CHARSET

파일의 인코딩 형식(기본값: UTF-8). 인코딩 형식은 IANA Charset Registry에 등록된 Preferred MIME Name 또는 Aliases에 등록된 이름을 사용합니다: https://www.iana.org/assignments/character-sets/character-sets.xhtml

사용 예

json "{
  'url': 'ko.logpresso.com/documents/%B7%CE%B1%D7%BA%D0%BC%AE'
}" 
| eval decode=urldecode(field("url"), "EUC-KR")
  => ko.logpresso.com/documents/로그분석

json "{
  'url': 'ko.logpresso.com/documents/%EB%A1%9C%EA%B7%B8%EB%B6%84%EC%84%9D'
}" 
| eval decode=urldecode(field("url"))
  => ko.logpresso.com/documents/로그분석

json "{}" | eval _line=urldecode(null) => null

5.20urlencode()urlencode()

주어진 문자열을 퍼센트(%) 인코딩하여 반환합니다.

문법

urlencode(STR_EXPR[, CHARSET])
STR_EXPR

원본 문자열 표현식. 표현식이 null이면 null을 반환합니다.

CHARSET

파일의 인코딩 형식(기본값: UTF-8). 인코딩 형식은 IANA Charset Registry에 등록된 Preferred MIME Name 또는 Aliases에 등록된 이름을 사용합니다: https://www.iana.org/assignments/character-sets/character-sets.xhtml

사용 예

json "{'uri': '퍼센트_인코딩'}" 
| eval
  decode=concat(
    "https://ko.wikipedia.org/wiki/",
    urlencode(field("uri"), "UTF-8")
  )
 => https://ko.wikipedia.org/wiki/%ED%8D%BC%EC%84%BC%ED%8A%B8_%EC%9D%B8%EC%BD%94%EB%94%A9

json "{}" | eval _line=urlencode(null) => null
Count of comments [0]