splunk

Splunk 正規表現でフィールドを抽出・置換する

更新日:

今回はSplunkで正規表現を使ってフィールドを抽出・置換します。
慣れないと難しいですが、思い通りに抽出できると気持ちいいです。

正規表現を使ったフィールド抽出

コマンド

rexコマンドを使って抽出します。

rex field=元フィールド (?P<抽出先フィールド名>フィールド値に含めるパターン)

Sample Code

FIELDをカンマ(,)とスペース( )を区切り文字として分解しています。

| makeresults
| eval FIELD="aaa bbb ccc"
| append [|makeresults | eval  FIELD="eee, fff"]
| append [|makeresults | eval  FIELD="ggg, hhh iii"]
| rex field=FIELD "(?P<FIELD1>^.*?)(\,\s|\s)"
| rex field=FIELD "^.*?(\,\s|\s)(?P<FIELD2>\w+)"
| rex field=FIELD "^.*(\,\s|\s).*?(\,\s|\s)(?P<FIELD3>\w+)"
| fields - _time

結果

先頭ブロックの抽出

| rex field=FIELD "(?P<FIELD1>^.*?)(\,\s|\s)"

^.*?」で先頭から抽出条件に最短マッチする値をFIELD1に抽出しています。

(\,\s|\s)」で「カンマ+スペース」または「スペース」を抽出条件として指定しています。

2つ目のブロックの抽出

| rex field=FIELD "^.*?(\,\s|\s)(?P<FIELD2>\w+)"

^.*?(\,\s|\s)」で先頭から「カンマ+スペース」または「スペース」までの最短マッチを指定し、「\w+」でアルファベット、数字、アンダスコアの繰り返しをFIELD2に抽出しています。

3つ目のブロックの抽出

| rex field=FIELD "^.*(\,\s|\s).*?(\,\s|\s)(?P<FIELD3>\w+)"

^.(\,\s|\s).?(\,\s|\s)」で先頭から2つ目の「カンマ+スペース」または「スペース」までの最短マッチを指定し、「\w+」でアルファベット、数字、アンダスコアの繰り返しをFIELD3に抽出しています。

正規表現を使った置換

コマンド

sedを使って置換ができます。

rex field=置換するフィールド名 mode=sed “sedコマンド

Sample Code

FIELDのカンマ(,)とスペース( )を@に置換しています。

| makeresults
| eval FIELD="aaa bbb ccc"
| append [|makeresults | eval  FIELD="eee, fff"]
| append [|makeresults | eval  FIELD="ggg, hhh iii"]
| eval FIELD_SED = FIELD
| rex field=FIELD_SED mode=sed "s/(\,\s|\s)/@/g"
| fields - _time

結果

まとめ

慣れないとコードの内容を理解するのが難しいですが、使いこなすと非常に便利なので、積極的に使ってマスターしたいですね。

 







-splunk
-

Copyright© Tech Log , 2020 All Rights Reserved Powered by STINGER.