Npm package.json中sed的使用问题

Npm package.json中sed的使用问题,npm,sed,package.json,Npm,Sed,Package.json,在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中的
    \/
    包.json中的
    \/
    )。不要在文件路径中转义
    /
    字符

  • 另外,将给定给sed的模式用JSON转义双引号括起来,即
    \“…\”

  • package.json

    。。。
    “脚本”:{
    “替换”:“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
    将替换以下所有实例:

    在文件内容的
    src/styles/external/application.scss
    中,包含以下内容:


    你看过shx的文档了吗?--他们在这里提到了这个主题。是的:“注意:与unix sed一样,shx sed将/视为一个特殊字符,如果您打算在正则表达式或替换字符串中使用此字符,则必须对其进行转义(在shell中为\/或在package.json中为\/转义)。不要在文件路径中转义/字符。”-我已经写过了-双重转义-\\/谢谢。我得到了相同的解决方案,但认为“有问题”,因为我也在控制台中替换了输入文件的内容。
    '../node_modules/x/y/z/x.min';
    
    'node_modules/x/y/z/x.min';