我有一个单独的文件shell脚本(BusyBox,没有bash,我相信是ksh)我想在运行时写一个自己的路径。我需要将#home替换为home = / home。我有这个:
var="/home"
#home
sed -i 's/#home/home=$var/g' /this/file.sh
运行时,它将替换#home和sed行中的字符串,并且$ var不会展开:
var="/home"
home=$var
sed -i 's/home=$var/home=$var/g' /this/file.sh
这是我期望的结果:
var="/home"
home=/home
sed -i 's/#home/home=$var/g' /this/file.sh
我拉着头发上班。任何提示?
回答自己这是按预期工作的:
var="/home"
#home
sed -i "s|^#home|home=${var}/|g" m.sh
答案 0 :(得分:1)
虽然可能有几种方法可以解决这个问题。尝试在模式的开头添加抑扬符(^),以指示应该在行的开头找到此模式。
在运行脚本之前(此处命名为m.sh)
#!/bin/bash
var="/home"
#home
sed -i 's/^#home/home=$var/g' m.sh
运行脚本后
#!/bin/bash
var="/home"
home=$var
sed -i 's/^#home/home=$var/g' m.sh
修改强>
您可能还想考虑删除sed中的g
修饰符,因为您只想在该行中匹配一次。