メインコンテンツまでスキップ
Sumo Logic Japanese

replace

replace operator は、指定された文字列のすべてのインスタンスを別の文字列に置換します。置き換える文字列を一致する正規表現またはリテラル テキストで指定します。名前のすべてのインスタンスを検索して、新しい名前に変更したり、フィールド内の句読点を他の句読点に置き換えたりする場合などに使用できます。この operator は何かの名前を変更する必要がある場合に便利です。

構文

  • replace(<sourceString>, <searchString>, <replaceString>) as <field>
  • replace(<sourceString>, /<regex>/, <replaceString>) as <field>

ルール

  • エイリアスは必須です。
  • いずれかの入力が null であれば、出力も null になります。
  • searchString が見つからないか、正規表現が一致しない場合は、sourceString がそのまま返されます。
  • 正規表現は re2 に準拠している必要があります。
  • 文字列では大文字と小文字が区別されます。
  • 同じフィールドに対して複数の replace operator を使用する場合は、同じエイリアスを使用する必要があります。下記の例を参照してください。

正規表現の使い方

正規表現を使用して置換対象を定義できます。キャプチャ グループは省略可能です。名前または数字で指定したキャプチャ グループを使用して、<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-prodeu-produs-produs-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

  • この記事は役に立ちましたか?