2009-09-17 122 views
0

我更换一个脚本里面的命令的问题,在脚本中出错行看起来是这样的:sed替换命令里面的bash脚本?

nail -r "[email protected]" -s "Subject" -S smtp=255.255.255.255 

但我:

mail -s "$(hostname) on $(date)" 

应该有这样的线来代替不能得到sed做替换:)我写了一个小脚本,为此目的:

#!/bin/bash 

old="mail -s \"\$(hostname) on \$(date)" 
new="nail -r \"[email protected]\" -s \"Subject\" -S smtp=255.255.255.255" 

sed -i 's|$old|$new|' script.sh 

有没有人有任何建议?

回答

3
sed -i "s|$old|$new|" script.sh 

请注意双引号。

+0

谢谢你指出这个愚蠢的错误:)我一直在使用SEED取代和追加双引号在需要的地方,厌倦了逃脱他们,所以我刚开始把在单引号中,并忘记它:) – f10bit 2009-09-17 12:23:34

1

Sed默认情况下不会在位编辑。如果您正在使用gnu Sed,请尝试提供就地标志-ikbak

+0

OP有'-i'选项。唯一的区别是你的备份是使用(不寻常的?)后缀“kbak”创建的。 – 2009-09-17 13:04:31

+0

是的,只是想知道他是否使用GNU SED – ennuikiller 2009-09-17 15:03:22