grep/awk/sedを使用してランダムパターンを取得する方法

grep/awk/sedを使用してランダムパターンを取得する方法

文字列を抽出したいログファイルがあります。数値文字列はランダムに生成され、これまでgrep/sed/awkを使用したすべての試行は失敗しました。

次の項目があります。

"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":

私が分析したいのは、ランダムに生成された部分です。

30c962de-b448-40ac-ade8-da6a8f49ce88

このタスクを実行するための迅速で汚い方法がある人はいますか?

答え1

速すぎて汚いですか?

$ grep -o -P '(?<=")[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}(?=")' input
30c962de-b448-40ac-ade8-da6a8f49ce88

"30c962de-b448-40ac-ade8-da6a8f49ce88"固定長とダッシュ位置(引用符で囲む)を持つ任意の値を見つけて-印刷します。そのセクションにもこだわりたい場合は、デフォルトの"id":提案条件に追加してください(?<=")

jqただし、これがJSONまたは一般データの場合は、適切なパーサーを使用してそのデータ(他のデータなど)を処理することを検討する必要があります。

答え2

提供された入力にAWKを使用するもう一つの汚いトリックです。

data='"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":
echo $data  | awk -F , '{ print $1}' | awk -F id:  '{print $1}' | awk  '{print $1}'
"30c962de-b448-40ac-ade8-da6a8f49ce88"

答え3

これが実際にJSON文書である場合は、次のようにjqデータ型に関係なく文字列を取得します。

jq -r '.document[2].part.id' file.json

idこれは、キーがJSONデータ構造の最上位配列にある特定の要素の一部であるオブジェクトpartの一部であると仮定します。document

または直接抽出することもできます。みんな id値:

jq -r '.. | select(type=="object" and has("id")) | .id' file.json

答え4

使用awk:

awk -F"[\":]" '{ print $5 }' infile

関連情報