REPLACE 명령어

REPLACE 명령어

replace 명령어는 검색 결과의 하나 이상의 필드에서 텍스트를 대체해요. 문자 그대로의(literal) 문자열 대체와 *를 사용한 와일드카드 패턴을 지원해요.

출처: 문서

본문

replace 명령어는 검색 결과의 하나 이상의 필드에서 텍스트를 대체해요. 문자 그대로의(literal) 문자열 대체와 *를 사용한 와일드카드 패턴을 지원해요.

구문 (Syntax)

replace 명령어의 구문은 다음과 같아요:

replace '<pattern>' WITH '<replacement>' [, '<pattern>' WITH '<replacement>']... IN <field-name>[, <field-name>]...

매개변수 (Parameters)

replace 명령어는 다음 매개변수를 지원해요.

매개변수 필수/선택 설명
<pattern> 필수 대체할 텍스트 패턴이에요.
<replacement> 필수 대체로 사용할 텍스트예요.
<field-name> 필수 대체를 적용할 하나 이상의 필드예요.

예제 1: 한 필드에서 텍스트 대체하기

다음 쿼리는 한 필드에서 텍스트를 대체해요:

source=otellogs
| replace "product-catalog" WITH "product catalog" IN `resource.attributes.service.name`
| fields `resource.attributes.service.name`, severityText
| head 5

쿼리는 다음과 같은 결과를 반환해요:

resource.attributes.service.name severityText
frontend INFO
cart INFO
product catalog WARN
payment ERROR
cart DEBUG

예제 2: 여러 필드에서 텍스트 대체하기

다음 쿼리는 여러 필드에서 텍스트를 대체해요:

source=otellogs
| replace "ERROR" WITH "Error", "WARN" WITH "Warning" IN severityText
| fields severityText, `resource.attributes.service.name`
| head 5

쿼리는 다음과 같은 결과를 반환해요:

severityText resource.attributes.service.name
INFO frontend
INFO cart
Warning product-catalog
Error payment
DEBUG cart

예제 3: 파이프라인에서 replace 명령어 사용하기

다음 쿼리는 쿼리 파이프라인에서 replace 명령어를 다른 명령어와 함께 사용해요:

source=otellogs
| where severityText = 'ERROR'
| replace "frontend-proxy" WITH "frontend proxy" IN `resource.attributes.service.name`
| fields `resource.attributes.service.name`, body
| head 3

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 3/3
+----------------------------------+-------------------------------------------------------------------------+
| resource.attributes.service.name | body                                                                    |
|----------------------------------+-------------------------------------------------------------------------|
| payment                          | Payment failed: connection timeout to payment gateway after 30000ms     |
| checkout                         | NullPointerException in CheckoutService.placeOrder at line 142          |
| payment                          | Out of memory: Java heap space - shutting down pod payment-6f8d4b-ht7q3 |
+----------------------------------+-------------------------------------------------------------------------+

예제 4: 여러 패턴-대체 쌍으로 텍스트 대체하기

다음 쿼리는 단일 replace 명령어에서 여러 패턴-대체 쌍을 사용해요. 대체는 순차적으로 적용돼요:

source=accounts
| replace "IL" WITH "Illinois", "TN" WITH "Tennessee" IN state
| fields state

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+-----------+
| state     |
|-----------|
| Illinois  |
| Tennessee |
| VA        |
| MD        |
+-----------+

예제 5: LIKE를 사용한 패턴 매칭

다음 쿼리는 replace 명령어가 일반 문자열 리터럴만 지원하므로 패턴 매칭을 위해 LIKE 명령어를 replace 명령어와 함께 사용해요:

source=accounts
| where LIKE(address, '%Holmes%')
| replace "Holmes" WITH "HOLMES" IN address
| fields address, state, gender, age, city

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 1/1
+-----------------+-------+--------+-----+--------+
| address         | state | gender | age | city   |
|-----------------+-------+--------+-----+--------|
| 880 HOLMES Lane | IL    | M      | 32  | Brogan |
+-----------------+-------+--------+-----+--------+

예제 6: 와일드카드 접미사 매칭

다음 쿼리는 *가 특정 끝 패턴 앞의 모든 문자와 일치하는 와일드카드 접미사 매칭을 보여줘요:

source=accounts
| replace "*IL" WITH "Illinois" IN state
| fields state

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------+
| state    |
|----------|
| Illinois |
| TN       |
| VA       |
| MD       |
+----------+

예제 7: 와일드카드 접두사 매칭

다음 쿼리는 *가 특정 시작 패턴 이후의 모든 문자와 일치하는 와일드카드 접두사 매칭을 보여줘요:

source=accounts
| replace "IL*" WITH "Illinois" IN state
| fields state

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------+
| state    |
|----------|
| Illinois |
| TN       |
| VA       |
| MD       |
+----------+

예제 8: 와일드카드 캡처 및 치환

다음 쿼리는 패턴과 대체 모두에서 와일드카드를 사용해 일치된 부분을 캡처하고 재사용해요. 와일드카드 수는 패턴과 대체에서 일치해야 해요:

source=accounts
| replace "* Lane" WITH "Lane *" IN address
| fields address

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------------------+
| address              |
|----------------------|
| Lane 880 Holmes      |
| 671 Bristol Street   |
| 789 Madison Street   |
| 467 Hutchinson Court |
+----------------------+

예제 9: 여러 와일드카드로 패턴 변환하기

다음 쿼리는 여러 와일드카드를 사용해 패턴을 변환해요. 대체의 각 와일드카드는 해당하는 캡처된 값으로 치환돼요:

source=accounts
| replace "* *" WITH "*_*" IN address
| fields address

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------------------+
| address              |
|----------------------|
| 880_Holmes Lane      |
| 671_Bristol Street   |
| 789_Madison Street   |
| 467_Hutchinson Court |
+----------------------+

예제 10: 일치 항목을 고정 값으로 대체하기

다음 쿼리는 대체에 와일드카드가 0개일 때 모든 일치 값이 문자 그대로의 대체 문자열로 대체된다는 것을 보여줘요:

source=accounts
| replace "*IL*" WITH "Illinois" IN state
| fields state

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------+
| state    |
|----------|
| Illinois |
| TN       |
| VA       |
| MD       |
+----------+

예제 11: 문자 그대로의 애스터리스크 매칭

문자 그대로의 애스터리스크 문자를 대조하려면 \*를, 문자 그대로의 백슬래시를 대조하려면 \\를 사용해요. 다음 쿼리는 \*를 사용해요:

source=accounts
| eval note = 'price: *sale*'
| replace 'price: \*sale\*' WITH 'DISCOUNTED' IN note
| fields note

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+------------+
| note       |
|------------|
| DISCOUNTED |
| DISCOUNTED |
| DISCOUNTED |
| DISCOUNTED |
+------------+

예제 12: 문자 그대로의 애스터릭스 기호로 텍스트 대체하기

다음 쿼리는 와일드카드로 패턴의 다른 부분을 보존하면서 텍스트에 문자 그대로의 애스터리스크 기호를 삽입하는 방법을 보여줘요:

source=accounts
| eval label = 'file123.txt'
| replace 'file*.*' WITH '\**.*' IN label
| fields label

쿼리는 다음과 같은 결과를 반환해요:

fetched rows / total rows = 4/4
+----------+
| label    |
|----------|
| *123.txt |
| *123.txt |
| *123.txt |
| *123.txt |
+----------+

제한 사항 (Limitations)

replace 명령어는 다음과 같은 제한 사항이 있어요:

  • 와일드카드(Wildcards): * 와일드카드는 0개 이상의 문자와 일치하며 대소문자를 구분해요.
  • 와일드카드 매칭: 대체 와일드카드는 패턴 와일드카드 수와 일치하거나 0개여야 해요.
  • 이스케이프 시퀀스: 문자 그대로의 애스터리스크에는 \*를, 문자 그대로의 백슬래시에는 \\를 사용해요.

더 알아보기 (Learn more)