得到sed错误

时间:2011-10-04 13:03:19

标签: shell sed

我是shell脚本的新手但遇到这个错误并且无法弄清楚是什么。

sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command
sed: 1: "/Users/local/Do ...": extra characters at the end of d command

这是我正在运行的脚本

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
    sed -i "s/HOSTNAME/${IP_ADDRESS}/g" $fl
done

由于

1 个答案:

答案 0 :(得分:46)

鉴于sed似乎认为您正在运行delete line命令(d),您可能希望输出命令以查看中的 >你的环境变量:

for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
    echo sed -i "s/HOSTNAME/${PSM_SERVER_ADDRESS}/g" $fl
done

PSM_SERVER_ADDRESS很可能正在破坏您的sed命令(并且可能需要进行处理才能使其干净)。一种方法(如果你有一个足够的sed)将使用未出现在环境变量中的分隔符,例如:

sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl

由于您已接受此答案,我不妨为您找到的其他问题添加解决方案。与Linux不同,BSD sed似乎有一个要求,它为-i选项提供了扩展。所以,虽然Linux允许:

sed -i "sed-command"

要就地编辑,BSD变体需要:

sed -i "" "sed-command"

备份后缀为空。

如果不这样做,sed可以使用您的命令作为扩展名,并使用您的第一个文件名作为命令。