I've experiencing problems using variables as parameters for sed.
My sample:
set -x
cat sample.txt
variable=123
parameter='s/ab/'${variable}'/g'
cat sample.txt | sed $parameter
variable=123
parameter='s/a b/'${variable}'/g'
cat sample.txt | sed $parameter
cat sample.txt | sed 's/a b/123/g'
parameter="'s/ab/'${variable}'/g'"
cat sample.txt | sed $parameter
My result:
+ cat sample.txt
a b
ab
+ variable=123
+ parameter=s/ab/123/g
+ cat sample.txt
+ sed s/ab/123/g
a b
123
+ variable=123
+ parameter='s/a b/123/g'
+ cat sample.txt
+ sed s/a b/123/g
sed: 1: "s/a": unterminated substitute pattern
+ cat sample.txt
+ sed 's/a b/123/g'
123
ab
+ parameter=''\''s/ab/'\''123'\''/g'\'''
+ cat sample.txt
+ sed ''\''s/ab/'\''123'\''/g'\'''
sed: 1: "'s/ab/'123'/g'": invalid command code '
As you can see, when there is a space into the pattern to search my solution doesn't work and I don't know why. In the last try even weirder things starts to happen...
I've been trying and this works:
set -x
cat sample.txt
variable=123
parameter="s/a b/"${variable}"/g"
echo $parameter
cat sample.txt | sed "$parameter"
+ cat sample.txt
a b
ab
+ variable=123
+ parameter='s/a b/123/g'
+ echo s/a b/123/g
s/a b/123/g
+ cat sample.txt
+ sed 's/a b/123/g'
123
ab
It seems that sed or bash ¿? puts the single quote for me...
Can anyone explain this behaviour?