I want to search a configuration file for this expression: "central.database". I then want to change the setting associated with "central.database" to "SQLTEST".
The layout of the config file would look like this initially:
central.database = SQLFIRSTTEST
This is what i want it to look like after the sed replacement:
central.database = SQLTEST
I am doing this in a bash script, any suggestions, recommendations or alternative solutions are welcome!
(Actually both central.database
and SQLTEST
come from bash variables here.)
My current code (third attempt):
sshRetValue=$(ssh -p "35903" -i $HOME/sshids/idrsa-1.old ${1} <<EOF
sed -i "s/^\($CENTRAL_DB_NAME\s*=\s*\).*\$/\1$CENTRAL_DB_VALUE/" /home/testing.txt;
echo $?
EOF
)
Error message:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sed: -e expression #1, char 58: unknown option to `s'
-bash: line 3: EOF: command not found
Explanation:
-i
tells sed to save the results to the input file. Without it sed will print the results to stdout./central\.database =/
matches lines that contain the string between slashes:central.database =
. The.
is escaped since it's a special character in regex.s/OLD/NEW/
part performs a substitution. The OLD string is a regular expression to match and theNEW
part is the string to substitute in..*
means "match anything". So= .*
matches an equal sign, space, and then anything else afterward.