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개여야 해요.
- 이스케이프 시퀀스: 문자 그대로의 애스터리스크에는
\*를, 문자 그대로의 백슬래시에는\\를 사용해요.