sed inplace replacement 替换自身
sed inplace replacement replaces itself
我有一个文件 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
虽然可能有多种方法可以解决这个问题。尝试在模式的开头添加抑扬符 (^) 以指示应在行的开头找到此模式。
在运行脚本之前(此处命名为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
修饰符,因为您只想在行中匹配一次。
我有一个文件 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
虽然可能有多种方法可以解决这个问题。尝试在模式的开头添加抑扬符 (^) 以指示应在行的开头找到此模式。
在运行脚本之前(此处命名为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
修饰符,因为您只想在行中匹配一次。