replace_string

This page explains how to use the replace_string function in APL.

The replace_string function replaces all occurrences of a plain string with another string. Use this function when you need exact string matching without regular expression patterns, which makes it faster and simpler than regex-based replacement.

Usage

Syntax

replace_string(lookup, rewrite, text)

Parameters

NameTypeRequiredDescription
lookupstringYesThe plain string to search for and replace.
rewritestringYesThe replacement string.
textstringYesThe source string to perform replacements on.

Returns

Returns the text with all occurrences of the lookup string replaced by the rewrite string. Matches don't overlap.

Use case examples

Normalize HTTP methods by replacing abbreviations with full names for consistency.

Query

['sample-http-logs']
| extend normalized_method = replace_string('GET', 'Retrieve', method)
| extend normalized_method = replace_string('POST', 'Create', normalized_method)
| extend normalized_method = replace_string('PUT', 'Update', normalized_method)
| extend normalized_method = replace_string('DELETE', 'Remove', normalized_method)
| summarize request_count = count() by normalized_method, status
| sort by request_count desc
| limit 10

Run in Playground

Output

normalized_methodstatusrequest_count
Retrieve2005432
Create2012341
Retrieve4041234
Update200987

This query replaces HTTP method abbreviations with descriptive action names, making logs more readable for non-technical audiences.

Standardize service names by replacing environment-specific prefixes.

Query

['otel-demo-traces']
| extend clean_service = replace_string('prod-', '', ['service.name'])
| extend clean_service = replace_string('staging-', '', clean_service)
| extend clean_service = replace_string('dev-', '', clean_service)
| summarize span_count = count() by clean_service, kind
| sort by span_count desc
| limit 10

Run in Playground

Output

clean_servicekindspan_count
frontendserver4532
checkoutclient3421
cartinternal2987

This query removes environment prefixes from service names to enable cross-environment analysis and aggregation.

Anonymize IP addresses by replacing specific segments for privacy compliance.

Query

['sample-http-logs']
| extend simulated_ip = '192.168.1.100'
| extend anonymized_ip = replace_string('.100', '.XXX', simulated_ip)
| extend anonymized_ip = replace_string('.1.', '.X.', anonymized_ip)
| project _time, uri, simulated_ip, anonymized_ip, status, ['geo.country']
| limit 10

Run in Playground

Output

_timeurisimulated_ipanonymized_ipstatusgeo.country
2024-11-06T10:00:00Z/admin192.168.1.100192.168.X.XXX403United States
2024-11-06T10:01:00Z/api/secret192.168.1.100192.168.X.XXX401Unknown

This query anonymizes IP addresses by replacing specific octets with placeholders, enabling security analysis while maintaining privacy compliance.

  • replace: Replaces strings using regular expressions. Use this when you need pattern matching capabilities.
  • replace_regex: Alias for replace with regex support. Use this for pattern-based replacements.
  • strcat: Concatenates strings. Use this when building new strings rather than replacing parts of existing ones.
  • substring: Extracts parts of strings. Use this when you need to extract rather than replace text.

Other query languages