以下は設定ファイルの内容です。
{
"Line1": true,
"Line2": "\/\/{hostname}\/",
"version": "2.8.9",
"Line4": true,
"Line5": true
}
私はLinuxを使用しており、上記の意味バージョン番号2.8.9を見つけて変数に保存し、次の変数の論理に従ってメジャー、マイナー、またはパッチバージョンに置き換える必要があります。
誰でも適切なものを提案できますか?sed正規表現セマンティックバージョンを見つけて置き換えるために使用されます。
セマンティックバージョンの2つの有効な正規表現は次のとおりです。
^([0-9]+\.){2,2}(\*|[0-9]+)(\-.*){0,1}$
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
答え1
JSONを解析する方法
免責事項、あまりにも早く読んで検索と置換の応答ではありません。
@Kusulandraは良いことを与えた。
jq --arg new '3.0.0' '.version = $new' file | sponge file
そしてジャック:
jq -r '.version' file.json
そしてグローエンそしてGNUgrep
gron file.json | grep -oP 'version.*?"\K[^"]+'
そして行く
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
)
func main() {
fileContent, err := os.Open("/tmp/file.json")
if err != nil {
log.Fatal(err)
return
}
defer fileContent.Close()
byteResult, _ := ioutil.ReadAll(fileContent)
var res map[string]interface{}
json.Unmarshal([]byte(byteResult), &res)
fmt.Println(res["version"])
}
そしてjson_xsコマンドライン
json_xs < file.json -t none -e 'print %{ $_ }{version}'
Perlモジュールを介してインストールJSON::XS
そして真珠
#!/usr/bin/perl
use strict; use warnings;
use File::Slurp;
use JSON::XS;
my $text = read_file("file.json");
$text = decode_json $text;
print $text->{version};
そしてPython
import json
# Opening JSON file
f = open('file.json')
# returns JSON object as a dictionary
# by parsing the data and assigns it to a variable
data = json.load(f)
# print the json value 'version'
print(data['version'])
# Closing file
f.close()
出力
2.8.9
答え2
バージョン番号にのみ興味がある場合は、grepがsedよりも優れた操作を実行できます。
$ grep -o '[0-9]\+\.[0-9]\+\.[0-9]+' infile
2.8.9
ただし、バージョン番号を見つけて置き換えるには、以下を試してください。
$ sed 's/[0-9]\+\.[0-9]\+\.[0-9]\+/REPLACEMENT/' infile
{
"Line1": true,
"Line2": "\/\/{hostname}\/",
"version": "REPLACEMENT",
"Line4": true,
"Line5": true
}