パターンと例外に基づいて内部文字列を検索して置換する

パターンと例外に基づいて内部文字列を検索して置換する

一部のKey-Valueペアを返すJSON文字列がありますが、値が数値の場合は二重引用符で囲まれていないため、JSON解析は機能しません。

私の考えは、以下を除くすべての項目を検索して置き換えて文字列を操作することです。:開く中:"かっこ{

また、末尾で二重引用符を閉じる必要があるため、0〜9の後にカンマが続くことを見つけて、そのコンマを次に置き換える方法を見つける必要があります。",

"{検索/交換にはSEDが必要だと思いますが、SEDとRegExに初めて触れたので、始める方法、特に見つけた場所を省略し、RegExを使って見つける方法がわかりません。[0-9],

サンプルJSON文字列は次のとおりです。

{"data":{"project":{"issue":{"session":{"id":"625fdv6b95e232f08d6cy2686624f315","createdAt":1539849060000,"buildVersionId":"75492373","sdk":{"display":"1.11.1"},"os":{"platform":"unknown","modified":false},"memory":{"free":853000192,"used":1896611840},"storage":{"free":241791528960,"used":14197940224},"device":{"architecture":"arm64","manufacturer":"Samsung"}}}}}}

変更後に必要な完了JSONは次のとおりです。

{"data":{"project":{"issue":{"session":{"id":"625fdv6b95e232f08d6cy2686624f315","createdAt":"1539849060000","buildVersionId":"75492373","sdk":{"display":"1.11.1"},"os":{"platform":"unknown","modified":false},"memory":{"free":"853000192","used":"1896611840"},"storage":{"free":"241791528960","used":"14197940224"},"device":{"architecture":"arm64","manufacturer":"Samsung"}}}}}}

ほぼ同じですが、各数値に二重引用符があります。

ベストアンサー1

どうですか?

sed 's/:\([0-9]*\)\([,}]\)/:"\1"\2/g' inp >out
  • s/:\([0-9]*\)\([,}]\)-:数字の後に,またはを入力して検索します}。キャプチャ\1に数字を入れ、\2に,orを}入れます。
  • /:"\1"\2/g- 次に置き換えて、:"\ 1(数字)をキャプチャしてからにキャプチャしてから、"\ 2(元のサフィックス文字)をキャプチャします。

はい

$ cat inp
{"data":{"project":{"issue":{"session":{"id":"625fdv6b95e232f08d6cy2686624f315","createdAt":1539849060000,"buildVersionId":"75492373","sdk":{"display":"1.11.1"},"os":{"platform":"unknown","modified":false},"memory":{"free":853000192,"used":1896611840},"storage":{"free":241791528960,"used":14197940224},"device":{"architecture":"arm64","manufacturer":"Samsung"}}}}}}
$ sed 's/:\([0-9]*\)\([,}]\)/:"\1"\2/g' inp >out
$ cat desired
{"data":{"project":{"issue":{"session":{"id":"625fdv6b95e232f08d6cy2686624f315","createdAt":"1539849060000","buildVersionId":"75492373","sdk":{"display":"1.11.1"},"os":{"platform":"unknown","modified":false},"memory":{"free":"853000192","used":"1896611840"},"storage":{"free":"241791528960","used":"14197940224"},"device":{"architecture":"arm64","manufacturer":"Samsung"}}}}}}
$ diff out desired
$

おすすめ記事