在一个包中。json,我试着替换它:
"main": "lib/index.js",
"types": "lib/index.d.ts",
By that:
"main": "./index.js",
"types": "./index.d.ts",
因此,我编写了一个简单的脚本,将字符串模式替换为一个点,如下所示:sed 's/lib//.//g' package.json
当我在终端中输入它时它就工作了。
但是当它插入到包中时不能正常运行。json脚本。
package.json:
"build": "tsc && cp package.json lib/ && cd lib && sed 's/lib//.//g' package.json && npm publish ./lib"
输出:
sed: 1: "s/lib//.//g": bad flag in substitute command: '.'
它一直用正斜杠替换转义的反斜杠。
我怎样才能使它工作呢?
您更改了json文档,在
json
中具有特殊含义。这也是一个转义字符。因此您需要转义您的转义字符:
s/lib\//.\//g
或为json
解析器提供反斜杠的unicode值:
s/libu005c//.u005c//g
或者更简单,当您想要匹配的字符之一时,不要在sed中使用正斜杠作为分隔符:
sed 's,lib/,./,g'
注意,您实际上并没有修改文档。要做到这一点,添加sed
选项-i
。
sed -i 's,lib/,./,g' package.json
注意:如果你使用的是BSD工具,你需要给-i
添加一个空参数:
sed -i '' 's,lib/,./,g' package.json
或者通过而不是复制cd lib
后面的文档来避免这个问题。您可以对原始文件进行sed
,并将输出定向到新文件:
sed 's,lib/,./,g' package.json > lib/package.json