bash - 如何修复 sed:sc 中没有以前的正则表达式错误
问题描述
嗨,我正在运行:
sudo sed -i "s/${SERVER_ENVIRONMENT}/$SERVER_ENVIRONMENT/" /etc/nginx/sites-available/default.conf
在 bash 脚本中。
我想将字符串 ${SERVER_ENVIRONMENT} 替换为存储在 /etc/environment 中的环境变量“$SERVER_ENVIRONMENT”的值,但是当我运行 bash 脚本时出现此错误:
sed: -e 表达式 #1, char 0: 没有之前的正则表达式
有谁知道我如何解决这个错误?干杯
解决方案
sed 不理解文字字符串,只能理解正则表达式和启用反斜杠的替换文本,有关详细信息,请参阅is-it-possible-to-escape-regex-metacharacters-reliably-with-sed。
我会为此使用 awk ,因为它确实允许您使用文字字符串:
awk -i inplace '
BEGIN { old="${SERVER_ENVIRONMENT}"; new=ENVIRON["SERVER_ENVIRONMENT"] }
s=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) }
1' /etc/nginx/sites-available/default.conf
无论$SERVER_ENVIRONMENT
包含哪些字符,上述内容都将起作用。
要使用awk -i inplace '...' file
GNU awk 进行“就地”编辑,就像sed -i '...' file
使用 GNU sed 一样。
由于您的变量名称是全大写的,我假设它已导出(请参阅正确的 bash-and-shell-script-variable-capitalization了解我为什么这么说)但如果不是,则在命令行上将其设置为自身,以便您不要不必将其导出即可在以下位置使用ENVIRON[]
:
SERVER_ENVIRONMENT="$SERVER_ENVIRONMENT" awk -i inplace '...' file
推荐阅读
- jquery - 隐藏后如何在 IE 中制作 gif 动画?
- java - 从打包为 jar 文件的 java 程序中的资源中提取图像
- spring - 有什么解决方案可以在 springmvc 3 版本中实例化跟踪过滤器吗?
- php - 如何在 PHP 中实现“随机矿井”
- c# - DateTime.TryParse 即使在设置时也可以作为不同的文化
- python - 我已经建立了一个小烧瓶网页,但只在本地主机上运行,而我想让它在我的本地网络 python3.7 上运行
- reactjs - setState() 生效后如何触发 AJAX 调用?
- javascript - JavaScript:如何从 setAttribute 设置图像的路径?
- javascript - 如何拦截angularJs中的函数
- ios - 当且仅当屏幕快速旋转到横向模式时,我将如何添加新的 ViewController