Bash:
Searching and replacing text
How to:
Here’s how you wield the power of search and replace in bash:
- Swap text within a string using
sed
:
echo "Hello world" | sed 's/world/universe/'
# Output: Hello universe
- Replace text in a file, saving the changes:
sed -i 's/old_text/new_text/g' file.txt
- Use variables in your search and replace:
old="apple"
new="banana"
sed "s/$old/$new/g" <<< "I like apple pies"
# Output: I like banana pies
Remember, g
at the end means “global”, so you change every match in the line, not just the first one.
Deep Dive
We’ve had tools for text processing on Unix-like systems for ages. sed
, short for Stream Editor, is one such tool, and it’s been around since the 1970s. It’s not just for simple replacements; sed
can slice and dice text in complex patterns too.
Alternatives? Sure. awk
is a bit more advanced and can work wonders with columns and rows. For quick fixes, grep
can help you find things, but it won’t replace – it’s more like the lookout.
Under the hood, sed
uses regular expressions, which are like wildcards on steroids. They can match almost any pattern you can think of. It makes sed
incredibly powerful, but also a bit tricky to master.
See Also
man sed
for the manual onsed
- An introduction to
sed
- Regular Expressions for Beginners
- The Art of Command Line for more bash tricks (https://github.com/jlevy/the-art-of-command-line)