구성 파일에서 의미 체계 버전 표현을 찾고 바꾸려면 sed를 사용해야 합니다.

구성 파일에서 의미 체계 버전 표현을 찾고 바꾸려면 sed를 사용해야 합니다.

다음은 구성 파일의 내용입니다.

{
  "Line1": true,
  "Line2": "\/\/{hostname}\/",
  "version": "2.8.9",
  "Line4": true,
  "Line5": true
}

저는 Linux를 사용하고 있으며 위의 의미 버전 번호 2.8.9를 찾아서 변수에 저장하고 다음 변수의 논리에 따라 메이저, 마이너 또는 패치 버전으로 바꿔야 합니다.

누구든지 적합한 것을 제안할 수 있나요?sed 정규식의미론적 버전을 찾고 바꾸는 데 사용됩니다.

의미론적 버전에 대한 2개의 유효한 정규식은 다음과 같습니다.

  1. ^([0-9]+\.){2,2}(\*|[0-9]+)(\-.*){0,1}$
  2. ^(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

그리고그로엔그리고 GNU

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};

그리고

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
}

관련 정보