得到sed错误

dav*_*cks 12 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
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的脚本

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

谢谢

pax*_*blo 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
Run Code Online (Sandbox Code Playgroud)

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

sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl
Run Code Online (Sandbox Code Playgroud)

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

sed -i "sed-command"
Run Code Online (Sandbox Code Playgroud)

要进行就地编辑,BSD变体需要具备:

sed -i "" "sed-command"
Run Code Online (Sandbox Code Playgroud)

带有空备份后缀.

如果没有它,sed可以使用您的命令作为扩展名,并使用您的第一个文件名作为命令.

  • 在这里找到解决方案http://stackoverflow.com/questions/4247068/sed-command-failing-on-mac-but-works-on-linux在-i之后必须使用单引号,谢谢你的帮助 (3认同)
  • 它是.值'PSM_SERVER_ADDRESS`是一个路径(包含`/`字符),所以s命令将那些`/`字符解释为其分隔符(例如,`s/HOSTNAME // Users/davidkavanagh/path/g`.看起来像备用应该使用分隔符.也许是@ s @ HOSTNAME @ $ {PSM_SERVER_ADDRESS}/g`. (2认同)