首页 > 解决方案 > 用动态bash脚本变量替换所有文件中包含冒号、斜杠和撇号的字符串?

问题描述

如何使用动态 bash 脚本变量替换具有给定模式的所有文件中包含冒号、斜杠和撇号的字符串?

我有几个带有类似字符串的 css 文件,src:url('/resource/我想用 $namespace bash 脚本变量的文字值来更改这些src:url('/resource/NS__字符串NS

我尝试执行以下命令

find force-app -type f -name "*.css" -exec sed -i "s/src\:url('\/resource\/:/src\:url('\/resource\/$namespace__/g" {} \;

和这个

find force-app -type f -name "*.css" -exec sed -i "" "s/src\:url('\/resource\/:/src\:url('\/resource\/$namespace__/g" {} \;

对于第一个命令,我收到了错误

sed: 1: "force-app/main/default/ ...": invalid command code f

对于第二个命令,我没有收到任何错误,但没有进行任何更改

我的本地环境是 MacOs,但我的 CI 目标在 ubuntu 上运行,所以我需要 Mac 和 Ubuntu 的两个版本工作

标签: bashsedgrep

解决方案


看来我明白了。

我需要转义单引号,但我不需要转义冒号或斜杠,所以这个命令确实有效

find force-app -type f -name "*.css" -exec sed -i "" "s|src:url(\'/resource/|src:url(\'/resource/${namespace}__|g" {} \; 

这个应该在ubuntu上工作

find force-app -type f -name "*.css" -exec sed -i  "s|src:url(\'/resource/|src:url(\'/resource/${namespace}__|g" {} \; 

推荐阅读