Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用bash工具替换package.json中的整行_Bash_Sed_Jq - Fatal编程技术网

使用bash工具替换package.json中的整行

使用bash工具替换package.json中的整行,bash,sed,jq,Bash,Sed,Jq,我正在使用一个命令行来安装nodejs项目所需的每个节点 目前,您可以执行以下操作: sudo gen-web-app express 这将生成开始为expressjs开发所需的所有内容 我现在正在工作 sudo gen-web-app reactjs 一切正常,除了我必须手动进入package.json并将启动脚本添加到文件中。 我知道在BASH中使用SED是可能的,但是我需要一些使用SED的帮助 这是文件: { "name": "test", "version": "1.0.0"

我正在使用一个命令行来安装nodejs项目所需的每个节点

目前,您可以执行以下操作:

sudo gen-web-app express
这将生成开始为expressjs开发所需的所有内容

我现在正在工作

sudo gen-web-app reactjs
一切正常,除了我必须手动进入package.json并将启动脚本添加到文件中。 我知道在BASH中使用SED是可能的,但是我需要一些使用SED的帮助

这是文件:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}
我想替换以下内容,但我希望得到一些帮助:)

-一个命令行
JSON
语法感知解析器,用于修改
.JSON
文件。以你的例子为例

tmp=$(mktemp)    
jq '.scripts.start = "webpack-dev-server" | del(.scripts.test)' input.json > "$tmp" && mv "$tmp" input.json
将生成最终的
.json
文件,如下所示

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}

您可以在由开发的免费游乐场中玩
jq

使用
jq
的另一个选项是简单地覆盖
的值。脚本

jq '.scripts = { start: "webpack-dev-server" }' file.json

这是使用
sed
可以完成的最基本任务。想看看它的文档还是快速教程?此外,如果可能,您应该避免使用
sed
,并使用能够理解
JSON
格式的工具,例如
jq
。不要使用像
sed
这样的非JSON语法感知解析器,使用
jq
,这是用于JSON解析的。你能下载并安装
jq
?谢谢你的回答,我们将研究jq:)!
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}
$ sed -ie 's/\"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"/\"start\": \"webpack-dev-server\"/g' file
$ cat file
{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "nodemon": "^1.11.0",
    "path": "^0.12.7",
    "react": "^15.6.1",
    "webpack": "^3.1.0",
    "webpack-dev-server": "^2.5.1"
  }
}
jq '.scripts = { start: "webpack-dev-server" }' file.json