Skip to content
Advertisement

SED not working [unterminated `s’ command]

i am trying to replace content of file using sed by following commands

searchString='(<property *name="sourceUrl" *value=")[^?]*~'
replacementString="file:///tmp/abc-efg"
sed -i 's~${searchString}1${replacementString}~g' $file

but it is giving

sed: -e expression #1, char 42: unterminated `s' command

Advertisement

Answer

You’re missing a separator (which is ~ in your case). It looks like you are trying to put it on the end of $searchString, which is strange. I don’t know why you’re doing that. The reason it doesn’t work is because the variables don’t get expanded inside single-quoted strings.

This might work:

sed -i "s~${searchString}1${replacementString}~g" $file

Really though, it’ll be easier to understand like this:

~ $ cat foo
<property name="sourceUrl" value="someurl?param=val"></property>
~ $ searchString='(<property *name="sourceUrl" *value=")[^?]*'
~ $ replacementString='file:///tmp/abc-efg'
~ $ sed -e "s~${searchString}~1${replacementString}~g" foo
<property name="sourceUrl" value="file:///tmp/abc-efg?param=val"></property>
User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement