Using Variables with Sed in Bash

01-12-2020

If you’ve every wanted to do some simple find and replace on string values sed is pretty straightforward way to do it from the command line or a script.

Our starting sed command:

1
sed 's/findme/replacewithme/g' file-to-search.txt > file-to-write-output.txt

In this command we define a few things:

  • String to find in the supplied file, ex: findme
  • String to replace all instances of the found string with, ex: replacewithme
  • Path to file to search, ex: file-to-search.txt
  • Path to file to output results (optional), ex: file-to-write-output.txt

This works well but it’s hard coded and not very flexible, let’s use a few variable’s to fix that. In order for our variables to be recognized and interpreted we need to use " ", double quotes around our command. And to avoid some (not all) issues with strings possibly being passed in without escaping we can change our delimiter from / to |.

1
2
3
4
OLD=find-this-string
NEW=replace-with-this-string

sed "s|$OLD|$NEW|g" file-to-search.txt

Updates to our command and portability have drastically improved with this small change. Note: we haven’t addressed all issues with escaping characters. If you control the variables for input and output, be sure to escape characters and test accordingly.