我是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
由于
答案 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
可以使用您的命令作为扩展名,并使用您的第一个文件名作为命令。