Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting sed error

Tags:

shell

sed

I'm new to shell scripting but getting this error and cant figure out what up.

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

Here is the script I'm running

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

Thanks

like image 922
daverocks Avatar asked Oct 04 '11 13:10

daverocks


1 Answers

Given that sed seems to think you're running a delete line command (d), you may want to output the command to see what's actually in that environment variable of yours:

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

There's a good chance the PSM_SERVER_ADDRESS is corrupting your sed command (and may need to be processed to make it clean). One way to do this (provided you have a recent enough sed) would be to use delimiters that do not appear in the environment variable, for example:

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

Since you've accepted this answer, I may as well add the resolution for the additional problem you found. It appears that BSD sed, unlike Linux, has a requirement that you provide an extension to the -i option. So, while Linux allows:

sed -i "sed-command"

to edit in-place, the BSD variant needs to have:

sed -i "" "sed-command"

with an empty backup suffix.

Without that, sed may use your command as the extension and your first file name as the command.

like image 168
paxdiablo Avatar answered Sep 19 '22 18:09

paxdiablo