Shell新手求助:如何在package.json第1行前插入指定scripts代码?
在package.json首行前插入scripts代码的sed解决方案
问题需求
需要在package.json文件的第1行之前插入以下代码片段:
"scripts": { "dev": "yarn tailwindcss -i ./src/input.css -o ./src/output.css --watch" },
尝试的sed命令未生效:
$ sed -i "1 i\ "scripts": { "dev": "yarn tailwindcss -i ./src/input.css -o ./src/output.css --watch" }," package.json
失败原因
- 引号冲突:用双引号包裹sed脚本时,内部的双引号未转义,shell会将其解析为命令的边界,导致sed脚本被拆分,无法正确识别完整插入内容。
- 多行格式错误:sed插入多行内容时,每行结尾需要加反斜杠
\标记续行,原命令未添加,导致sed仅处理了第一行内容。
可行解决方案
方案一:转义引号并添加续行标记
使用单引号包裹sed脚本(避免shell解析内部双引号),同时在每行结尾添加反斜杠:
sed -i '1 i\ "scripts": {\ "dev": "yarn tailwindcss -i ./src/input.css -o ./src/output.css --watch"\ },' package.json
方案二:使用Here-doc(更易读)
通过0r命令在文件开头(行号0,位于首行之前)读取标准输入内容插入,Here-doc里的内容可原样保留:
sed -i '0r /dev/stdin' package.json << 'EOF' "scripts": { "dev": "yarn tailwindcss -i ./src/input.css -o ./src/output.css --watch" }, EOF
注:如果是macOS系统,
sed -i需要加空参数(sed -i '' '...'),否则会自动生成备份文件。
内容的提问来源于stack exchange,提问作者codewithjom
相关产品推荐
相关产品推荐

