【发布时间】: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,脚本变得更小更清晰。