How can I use variables in the LHS and RHS of a sed substitution?
You could do:
sed "s/$old_run/$new_run/" < infile > outfile
But beware that $old_run
would be taken as a regular expression and so any special characters that the variable contains, such as /
or .
would have to be escaped. Similarly, in $new_run
, the &
and \
characters would need to be treated specially and you would have to escape the /
and newline characters in it.
If the content of $old_run
or $new_run
is not under your control, then it's critical to perform that escaping, or otherwise that code amounts to a code injection vulnerability.
This worked:
cat update_via_sed.sh | sed 's/'"$old_run"'/'"$new_run"'/'
As I want to 'reuse' the same file I actually use this for anyone wishing a similar approach:
cat update_via_sed.sh | sed 's/'"$old_run"'/'"$new_run"'/' > new_update; mv -f new_update update_via_sed.sh
The above created a new file then deletes the current file than rename the new file to be the current file.
You can use variables in sed as long as it's in a double quote (not a single quote):
sed "s/$var/r_str/g" file_name >new_file
If you have a forward slash (/
) in the variable then use different separator like below
sed "s|$var|r_str|g" file_name >new_file