linux sed命令:sed替换命令使用环境变量,且环境变量中有文件分隔符时,sed命令不work (unknown option to s)
问题:sed替换命令使用环境变量,且环境变量中有文件分隔符时,sed命令不work
linux中sed命令可以做文本替换。
比如:
echo aaaccc111 | sed 's/aaa/bbb/g'
命令可以替换aaa为bbb, 输出结果为 bbbccc111
但是当使用环境变量时,命令会不太work。
比如
# 需要将一个文件中的 $currinterface 替换为目标环境变量 $interface
# 且环境变量是复杂的字符,且包括/文件分割符时,这个就不work了。
currinterface="interface = internal/10.1.51.221;external/10.1"
interface="interface = internal/10.1.51.221;external/10.1.51.221!101.43.111.111"
# 当执行sed命令时
echo abcdefg123456 | sed "s/1/$(echo $interface)/g"
sed: -e expression #1, char 28: unknown option to `s'
# 会报错 unknown option to s
解决方案:
需要使用 |
替换为 /
; 另外使用双引号 ""
; 最后是使用新的方式获取环境变量 $(echo $interface)
echo "interface = internal/10.1.51.221;external/10.1aaaaa" | sed "s|$(echo $currinterface)|$(echo $interface)|g"
# 输出为
interface = internal/10.1.51.221;external/10.1.51.221!101.43.111.111aaaaa