| | |
[Bash] problem with script in sed command
![]() |
•
•
Join Date: Jul 2005
Posts: 2
Reputation:
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
Shell Scripting Syntax (Toggle Plain Text)
parametro1=mario parametro2=ugo parametro3=elena parametro4=sara
Script:
Shell Scripting Syntax (Toggle Plain Text)
#!/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 # ... continua
executing the script:
Shell Scripting Syntax (Toggle Plain Text)
:~$ ./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:
Shell Scripting Syntax (Toggle Plain Text)
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:
Shell Scripting Syntax (Toggle Plain Text)
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:
Solved Threads: 0
•
•
•
•
Originally Posted by gritty
You said it works form the command line but not in the script?
this line works fine:
Shell Scripting Syntax (Toggle Plain Text)
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:
Shell Scripting Syntax (Toggle Plain Text)
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:
Shell Scripting Syntax (Toggle Plain Text)
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)
![]() |
Similar Threads
- Bash Mail script help (Shell Scripting)
- sendmail problem using cron (Shell Scripting)
- A simple script to execute a command package (Shell Scripting)
- Problem with variables in Windows shell script (Windows NT / 2000 / XP)
- Using find in a bash shell script (Shell Scripting)
Other Threads in the Shell Scripting Forum
- Previous Thread: how to get appended lines per second?
- Next Thread: Regex for password
| Thread Tools | Search this Thread |





