【问题标题】:use sed to replace version number in a package.json file使用 sed 替换 package.json 文件中的版本号
【发布时间】:2021-03-23 23:06:05
【问题描述】:

这是我的 package.json 文件的一部分

{
    "name": "org-team-module",
    "version": "1.1.0-snapshot",
    "description": "Some description",
    "scripts": {
        "start": "npm run build && npm run copy-static-assets && npm run serve",
        "build": "rimraf dist && npx tsc && echo npm run lint",

我想用特定值替换版本,比如 1.2.0-snapshot

这是我到现在为止的;

sed -nE -i 's/(^\s*"version": ")(.*?)(",$)/\11.2.0-snapshot\3/p' test.json

但是,当我添加 -i 标志来替换时;整个文件被搜索到的值替换。 即替换后的整个文件内容是

        "version": "1.2.0-snapshot",

我怎样才能替换文件中的特定行

【问题讨论】:

  • 我建议只需将参数更改为-E -i 并删除/p,例如sed -E -i 's/(^\s*"version": ")(.*?)(",$)/\11.2.0-snapshot\3/' test.json
  • sed 不适用于 JSON 文件;如果"version" 和它的值不在同一行,你的脚本将会失败(这不是常见的情况,但绝对是有效的 JSON)。我建议改用jq。它知道如何解析和生成 JSON,脚本变得更小更清晰。

标签: json sed


【解决方案1】:

sed 不适合处理 JSON 文件;如果 "version" 和它的值不在同一行,你的脚本将会失败(不是常见的情况,但绝对是有效的 JSON)。

我建议改用jq。它知道如何解析和生成 JSON,脚本变得更小更清晰。

用固定值替换version的值很简单:

jq '.version="1.2.0-snapshot"' package.json

它不会修改原始文件,而是将修改后的 JSON 转储到屏幕上。您的脚本可以将其输出重定向到一个临时文件,然后将临时文件移到原始文件上,如下所示:

jq '.version="1.2.0-snapshot"' package.json > package.json.new
mv package.json.new package.json

【讨论】:

    猜你喜欢
    • 2020-04-24
    • 2022-12-17
    • 2021-09-29
    • 1970-01-01
    • 2023-03-02
    • 2020-01-24
    • 1970-01-01
    • 2014-06-14
    • 2013-10-19
    相关资源
    最近更新 更多