【问题标题】:Script to replace a match of lines - MacOS, zsh替换匹配行的脚本 - MacOS、zsh
【发布时间】:2021-07-17 18:55:43
【问题描述】:

我正在尝试完成一个小脚本来创建我的自定义 React 环境并使用我想要的 eslint/prettier 配置安装我的 peerdeps,但我无法完成最后一步,即从 @ 替换这些行987654321@:

"eslintConfig": {
  "extends": [
    "react-app",
    "react-app/jest"
  ]
},

这些:

"eslintConfig": {
  "extends": "@gbrachetta/eslint-config"
},
"prettier": "@gbrachetta/prettier-config",

我尝试使用sed 逐行替换,但目前为止:

FILE="package.json"
sed -i '' 's/"react-app",/"@gbrachetta\/eslint-config"/g' $FILE
sed -i '' 's/"react-app\/jest"//g' $FILE

这目前产生:

"eslintConfig": {
  "extends": [
    "@gbrachetta/eslint-config"
    
  ]
},

未完成的任务是:

  • 删除第二个sed 命令留下的空行。
  • 在右大括号 + 逗号之后插入行 "prettier": "@gbrachetta/prettier-config",

我在 MacOS 和 zsh 上。我意识到某些sed 命令对我的设置的工作方式不同。

很想知道如何完成这个小任务!

【问题讨论】:

  • 你不需要两个sed调用,你可以给一个调用多个命令。
  • 你必须用sed做这个吗?该文件是 JSON,所以最好使用jq 来解析它并创建结果。
  • 哦,它不需要 sed。我不擅长编写脚本。我会使用任何适用于我的 bash 脚本的方法。
  • prettier 字段插入的位置重要吗?插入到文件末尾可以吗?
  • 那也不错!

标签: bash sed zsh


【解决方案1】:

我得到了这个:

cat <<< $(jq '.eslintConfig={extends: "@gbrachetta/eslint-config"}' package.json) > package.json
cat <<< $(jq '.+ {prettier: "@gbrachetta/prettier-config"}' package.json) > package.json

也许有更好的方法,但这工作正常。 非常感谢指点jq的cmets!

【讨论】:

  • 快速提示:您可以像这样链接 jq 调用:cat &lt;&lt;&lt; $(jq '.eslintConfig.extends= "@gbrachetta/eslint-config" | .prettier="@gbrachetta/prettier-config"' package.json) &gt; package.json
  • 太好了,谢谢您的提示!不过,就我而言,这很有效:cat &lt;&lt;&lt; $(jq '.eslintConfig.extends="@gbrachetta/eslint-config" | .+ {prettier: "@gbrachetta/prettier-config"}' package.json) &gt; package.json
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2014-08-16
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-05-01
  • 2018-02-01
  • 2020-04-16
相关资源
最近更新 更多