首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要使用sed从配置文件中查找和替换语义版本表达式。

需要使用sed从配置文件中查找和替换语义版本表达式。
EN

Unix & Linux用户
提问于 2023-01-23 15:19:27
回答 2查看 103关注 0票数 1

以下是配置文件的内容

代码语言:javascript
复制
{
  "Line1": true,
  "Line2": "\/\/{hostname}\/",
  "version": "2.8.9",
  "Line4": true,
  "Line5": true
}

我正在使用Linux,我需要找到上面2.8.9的语义版本,并将其存储在一个变量中,并根据下一个变量中的逻辑将其替换为主要版本、次要版本或补丁版本。

请有人建议使用适当的sed正则表达式来查找和替换语义版本。

这是两个语义版本的有效正则表达式。

  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-]+)*))?$
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2023-01-23 19:11:58

如果您只是在版本号之后,那么grep可以比sed做得更好:

代码语言:javascript
复制
$ grep -o '[0-9]\+\.[0-9]\+\.[0-9]+' infile 
2.8.9

但是,如果要查找并替换版本号,请尝试如下:

代码语言:javascript
复制
$ sed 's/[0-9]\+\.[0-9]\+\.[0-9]\+/REPLACEMENT/' infile 

{
  "Line1": true,
  "Line2": "\/\/{hostname}\/",
  "version": "REPLACEMENT",
  "Line4": true,
  "Line5": true
}
票数 0
EN

Unix & Linux用户

发布于 2023-01-23 15:31:20

解析JSON

方法

免责声明,正在快速读取,这不是搜索和替换响应.

@Kusulandra给出了一个好消息:

代码语言:javascript
复制
jq --arg new '3.0.0' '.version = $new' file | sponge file

jq:

代码语言:javascript
复制
jq -r '.version' file.json

格朗和GNU grep

代码语言:javascript
复制
gron file.json | grep -oP 'version.*?"\K[^"]+'

代码语言:javascript
复制
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命令行

代码语言:javascript
复制
json_xs < file.json -t none -e 'print %{ $_ }{version}'

通过Perl模块JSON::XS安装

珀尔

代码语言:javascript
复制
#!/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

代码语言:javascript
复制
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()

输出

代码语言:javascript
复制
2.8.9
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/732798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档