Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 获取sed错误_Shell_Sed - Fatal编程技术网

Shell 获取sed错误

Shell 获取sed错误,shell,sed,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 s

我对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

谢谢

鉴于
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\u服务器\u地址
正在损坏您的
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
可能会使用您的命令作为扩展名,使用您的第一个文件名作为命令。

确实如此。值
PSM\U SERVER\U ADDRESS
是一个路径(包含
/
字符),因此s命令将这些
/
字符解释为其分隔符(例如,
s/HOSTNAME//Users/davidkavanagh/path/g
。看起来应该使用其他分隔符。可能
s@HOSTNAME@${PSM_服务器_地址}/g
.IP_ADDRESS等于一个函数,该函数使用hostname-i获取IP,以便在所有主机上使用platforms@daverocks,即使进行了更改,您仍然需要运行我提供的修改后的脚本以获得回音。这是唯一一种知道给
sed
的命令是什么的方法。@paxdiablo是的,我最近遇到过在我的一个sed脚本中解决了这个问题。更改分隔符有效。当sed将变量值传递给替换字段时,它会混淆,而替换字段恰好看起来像“/”。我的首选项是下划线“\u1”,但您也可以使用“?”。这里找到的解决方案必须在-i之后使用单引号,谢谢帮助