Using Variables with Sed in Bash

Jan 12, 2020 min read

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:

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 |.

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.