sed inplace replacement取代了自己

时间:2016-08-30 08:08:55

标签: shell sed sh ksh

我有一个单独的文件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

1 个答案:

答案 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修饰符,因为您只想在该行中匹配一次。