replace
replace operator は、指定された文字列のすべてのインスタンスを別の文字列に置換します。置き換える文字列を一致する正規表現またはリテラル テキストで指定します。名前のすべてのインスタンスを検索して、新しい名前に変更したり、フィールド内の句読点を他の句読点に置き換えたりする場合などに使用できます。この operator は何かの名前を変更する必要がある場合に便利です。
構文
replace(<sourceString>, <searchString>, <replaceString>) as <field>
replace(<sourceString>, /<regex>/, <replaceString>) as <field>
ルール
正規表現の使い方
正規表現を使用して置換対象を定義できます。キャプチャ グループは省略可能です。名前または数字で指定したキャプチャ グループを使用して、<replaceString>
で参照できます。
名前で指定するキャプチャ グループ:
/(?<section>flight)\/(?<id>[0-9]{5,})/
この例では、名前付きのキャプチャ グループ section を、<replaceString>
で ${section}
として参照します。
番号で指定するキャプチャ グループ:
/(flight)\/([0-9]{5,})/
<replaceString>
では、最初のキャプチャ グループを $1
、2 番目のキャプチャ グループを $2
として参照します。
$0
を指定すると、一致文字列全体が参照されます。
エスケープが必要な文字
<replaceString>
にドル記号 ($
) を指定する場合は、\\$
のようにエスケープする必要があります。同様に、\ 記号は \\\\
のようにエスケープします。他にも次の文字をエスケープできます。
\n
: 改行文字に置換\t
: タブ文字
例
正規表現による URL の一意の ID の置換
一意の ID の集計を行わずに URL への訪問回数を確認するため、ID を空文字列に置換することができます。次の URL を想定します。この URL は url
フィールドに格納されます。
http://somewebsite.com/flight/12345678/certification
ID 12345678
を url
フィールドから削除するには、正規表現を使用して次のクエリを実行します。
| replace(url, /[0-9]{5,}/, "") as url
これにより、次のような URL が返されます。
http://somewebsite.com/flight//certification
このようにして、特定の ID なしで、URL がリクエストされた回数をカウントできます。
正規表現キャプチャ グループを使用した置換
前の例に続いて、置換文字列で正規表現を使用することで、キャプチャ グループの文字列を参照できます。同じ URL を使用します。
http://somewebsite.com/flight/12345678/certification
URL の ID セクションをキャプチャ グループの文字列を含む別のテキストに置換するには、次のクエリを実行します。
| replace(url, /(flight)\/([0-9]{5,})/, "new-$2-url") as url
これにより、次のような URL が返されます。
http://somewebsite.com/new-12345678-url/certification
正規表現には 2 つのキャプチャ グループがあり、<replaceString>
で $2
と指定することで、2 番目のキャプチャ グループの値を <replaceString>
で参照しています。
フィールドのピリオドを別の記号に置換
フィールドに含まれるピリオドを別の記号に置換するには、次のクエリを使用します。(このクエリでは、fields operator を使用して、必須フィールドのみを表示しています。)
error
| parse "[logger=*]" as logger
| replace(logger, ".","->") as logger_replace
| fields logger, logger_replace
結果は次のようになります。
フィールドからアンダースコアを削除して読みやすくする
moduleName
というフィールドからアンダースコアを削除するには、次のようなクエリを使用します。
... | replace(moduleName, "_", " ") as humanReadableModuleName
電話番号のピリオドをダッシュに置換
電話番号のピリオドをダッシュに置換するには、次のクエリを使用します。
phone_num
| parse "[phone_num=*]" as phone_num
| replace(phone_num, ".", "-") as phone_num_dash
デプロイの略称をフルネームに置換
この例では、deploymentName
というフィールドに、環境の別のデプロイの略称 (apac-prod
、eu-prod
、us-prod
、us-dev
など) が格納されています。デプロイの略称をフルネームに置換するには、次のクエリを使用します。
replace(deploymentName,"apac","Asia Pacific") as deploymentName
| replace(deploymentName,"eu","Europe") as deploymentName
| replace(deploymentName,"us","United States") as deploymentName
| replace(deploymentName,"prod","Production") as deploymentName
| replace(deploymentName,"dev","Development") as deploymentName
1 つのフィールド内の複数の文字列に対して replace operator を使用
たとえば、複数の文字列で数字の 5 をすべて 7 に置換し、4 をすべて 2 に置換する場合は、次のクエリのように複数の replace operator を使用します。
| replace(field, "5","7") as field
| replace(field, "4","2") as field
この例では、最初の event_id を event_code と一致するように設定してから、event_id に対して置換を実行しています。このようにすることで、event_id には常に一致相手が設定され、置換後の値がフィールドに戻された後のオペレーションでは値が一致しなくなります。
_sourceName=Application
|timeslice 1h
| parse "SourceName = \"*\";" as Source
| parse "Type = \"*\";" as Level
| parse "EventCode = *;" as Event_Code
| event_code as event_id
|replace(event_id, "1073743528","1704") as event_id
|replace(event_id,"1073758208","16384") as event_id
|replace(event_id,"1073742726","902") as event_id
|replace(event_id,"1073742890","1066") as event_id
|replace(event_id,"1073742724","900") as event_id
|replace(event_id,"1073750833","9009") as event_id
|replace(event_id,"1073742727","903") as event_id
|replace(event_id,"1073742827","1003") as event_id
|fields - event_code
//|count by level, _timeslice
//|transpose row _timeslice column level
|count by event_id