如何用sed在压缩JS文件内嵌的bash脚本片段中注入sed调用
解决sed无法匹配单行JS文件中bash片段的问题
问题核心
你要匹配的是单行JS文件里的字面量字符串——也就是\n\ttar -xf abc.tar.gz\n\tTAR_EXIT中的\n和\t是文本字符,不是实际的换行/制表符。之前的sed命令用了转义后的换行/制表符,自然匹配不到目标内容。
正确的sed命令
1. 双引号包裹的写法(保留原有习惯)
先执行set +H禁用!的历史扩展,然后把目标字符串里的\全部转义为\\,让sed识别为字面量字符:
set +H sed -i "s|\\n\\ttar -xf abc.tar.gz\\n\\tTAR_EXIT|\\n\\ttar -xf abc.tar.gz\\n\\tsed -i 's/if(this._eService.isBuilt)/if(!this._eService.isBuilt)/' abc*/out/logs/main/server.main.js\\n\\tTAR_EXIT|g" your-target-js-file.js
2. 单引号包裹的写法(减少转义层级)
用单引号包裹替换规则时,内部的\只需转义一次;替换内容里的单引号要写成'\''(单引号闭合+转义单引号+重新打开单引号):
set +H sed -i 's|\\n\\ttar -xf abc.tar.gz\\n\\tTAR_EXIT|\\n\\ttar -xf abc.tar.gz\\n\\tsed -i '\''s/if(this._eService.isBuilt)/if(!this._eService.isBuilt)/'\'' abc*/out/logs/main/server.main.js\\n\\tTAR_EXIT|g' your-target-js-file.js
验证方法
先去掉-i参数,加上-n和p预览匹配结果,确认正确后再执行文件修改:
sed -n "s|\\n\\ttar -xf abc.tar.gz\\n\\tTAR_EXIT|\\n\\ttar -xf abc.tar.gz\\n\\tsed -i 's/if(this._eService.isBuilt)/if(!this._eService.isBuilt)/' abc*/out/logs/main/server.main.js\\n\\tTAR_EXIT|gp" your-target-js-file.js
内容的提问来源于stack exchange,提问作者RuMAN S
相关产品推荐
相关产品推荐

