在 npm 项目的 package.json 中,我以这种方式使用 sed:
shx sed -i "s/'..\/node_modules\/x\/y\/z\/x.min';/'node_modules\/x\/y\/z\/x.min';/" src/styles/external/application.scss
它只是用正确的替换打印文件的内容。当我从控制台尝试此操作而不转义时,它可以正常工作。如何进行适当的转义以使其正常工作?我还尝试了双重转义 - \/ 和另一个分隔符 - @。
在 npm 项目的 package.json 中,我以这种方式使用 sed:
shx sed -i "s/'..\/node_modules\/x\/y\/z\/x.min';/'node_modules\/x\/y\/z\/x.min';/" src/styles/external/application.scss
它只是用正确的替换打印文件的内容。当我从控制台尝试此操作而不转义时,它可以正常工作。如何进行适当的转义以使其正常工作?我还尝试了双重转义 - \/ 和另一个分隔符 - @。
首先,使用双反斜杠转义模式中路径名的所有正斜杠 ( /),即\\/. 如文档中所述,内容如下:
注意:像 unix 一样
sed,shx sed将/其视为特殊字符,如果您打算在正则表达式或替换字符串中使用此字符,则必须对其进行转义(如\/在 shell 中或\\/in 中)。package.json不要转义文件路径中/的字符。
此外,用 JSON 转义双引号将给定的 seds命令模式括起来,即\"...\"
包.json
...
"scripts": {
"replace": "shx sed -i \"s/'..\\/node_modules\\/x\\/y\\/z\\/x.min';/'node_modules\\/x\\/y\\/z\\/x.min';/g\" src/styles/external/application.scss"
^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^
},
...
注意给定的 npm 脚本还包含该g标志。
运行npm run replace将替换以下所有实例:
'../node_modules/x/y/z/x.min';
在文件的内容中src/styles/external/application.scss具有以下内容:
'node_modules/x/y/z/x.min';