I have a py file where we need to update the value of a variable table_name
from a shell script using sed
. The value will be like $ENV_NAME_ref_table
considering we have already exported ENV_NAME as export ENV_NAME='staging'
.
What should be the sed command?
I have tried some with sed -i
but can't figure out the regex.
sed -i "s/table_name = ".*"/table_name = \"$ENV_NAME_reference\"/" /src/utils/abc.py
CodePudding user response:
As far as I know, sed
is extremely greedy when you use something like .*
(although it seems to work in this case). I'd use this regular expression nevertheless:
$ ENV_NAME=staging
$ sed -i.back -E "s/table_name[[:space:]]*=[[:space:]]*\"[^\"] \"/table_name = \"${ENV_NAME}_reference\"/" temp.py
$ tail temp.py.back temp.py
==> temp.py.back <==
table_name="foo"
table_name ="foo"
table_name= "foo"
table_name = "foo"
table_name = "foo"
==> temp.py <==
table_name = "staging_reference"
table_name = "staging_reference"
table_name = "staging_reference"
table_name = "staging_reference"
table_name = "staging_reference"
So, table_name
followed by optional (*
) whitespace ([[:space:]]
), followed by =
, followed by optional whitespace, followed by "
, followed by many things that are not "
([^"]
), finally followed by "
.
We need backslaces to escape the doubles quotes because we have to wrap the whole RE in double quotes to interpolate the ENV_NAME
variable.