Please support our Shell Scripting advertiser: Programming Forums
Views: 4396 | Replies: 2
![]() |
•
•
Join Date: Jul 2005
Posts: 2
Reputation:
Rep Power: 0
Solved Threads: 0
I made a little script that searches and substitutes parameters in a configuration file but I've a problem:
Configuration file:
conf.tmp
Script:
executing the script:
look the output, the printed command line is correct but it works only if executed out of the script.
The same command in the script fails.
Command line:
in debug mode I look that:
sed: -e expression #1, char 1: Unknown command: `"'
Any hints?
Ps. Sorry for my terrible english
Configuration file:
conf.tmp
parametro1=mario parametro2=ugo parametro3=elena parametro4=sara
Script:
#!/bin/bash -x
TMP_FILE=./test.tmp
CONF_FILE=./conf.tmp
TOT_PARAMETERS=$#;
scratch=""
if test $[TOT_PARAMETERS%2] -ne 0
then
echo "Usage: $0 desc"
exit 1
fi
if test $# -lt 2
then
echo "Usage: $0 desc"
exit 1
fi
ctr=0
until [ -z "$1" ]
do
PARAMETER=$1
NEW_VALUE=$2
if test ${ctr} -eq 0
then
scratch="sed \"s%^$PARAMETER=.*%${PARAMETER}=${NEW_VALUE}%g\" "
else
scratch="${scratch} | sed \"s%^$PARAMETER=.*%${PARAMETER}=${NEW_VALUE}%g\" "
fi
let ctr=ctr+1
shift 2
done
echo -e ""
echo "COMMAND LINE: cat ${CONF_FILE} | ${scratch} > $TMP_FILE";
echo -e ""
cat ${CONF_FILE} | ${scratch} > $TMP_FILE
# ... continuaexecuting the script:
:~$ ./script.sh parametro1 pippo parametro2 pluto parametro3 paperino
look the output, the printed command line is correct but it works only if executed out of the script.
The same command in the script fails.
Command line:
cat ./conf.tmp | sed "s%^parametro1=.*%parametro1=pippo%g" | sed "s%^parametro2=.*%parametro2=pluto%g" | sed "s%^parametro3=.*%parametro3=paperino%g" > ./test.tmp
in debug mode I look that:
sed '"s%^parametro1=.*%parametro1=pippo%g"' '|' sed '"s%^parametro2=.*%parametro2=pluto%g"' '|' sed '"s%^parametro3=.*%parametro3=paperino%g"'
sed: -e expression #1, char 1: Unknown command: `"'
Any hints?
Ps. Sorry for my terrible english
•
•
Join Date: Jul 2005
Posts: 2
Reputation:
Rep Power: 0
Solved Threads: 0
•
•
•
•
Originally Posted by gritty
You said it works form the command line but not in the script?
exactly,
this line works fine:
cat $filename | sed "s%^p1=.*%p1=v1%g" | sed "s%^p2=.*%p2=v2%g" > $filetarget
But in the script same command fails because the command line it's changed in:
sed '"s%^p1=.*%p1=v1%g"' '|' sed '"s%^p2=.*%p2=v2%g"'
look the argument of sed all with added single quote, also the pipe.
here the solution at problem:
cmd=""
while [ -n "$1" ]
do
cmd="${cmd}s%^$(printf "%q" $1).*%${1}=${2}%;"
shift 2
done
sed -e "$cmd" conf.file > test.tmp it was more efficient, more intelligent and it works

(from comp.unix.shell)
![]() |
•
•
•
•
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)





Linear Mode