Searching Strings
sed, the “stream editor,” provides a flexible search-and-replace facility, which can be used to replace text. For example, you can upgrade your datacenter in one fell swoop by replacing Wintel with Linux:
sed s/Wintel/Linux/g datacenter
sed is extremely powerful, but the basic search-and-replace functionality is also a feature of bash. Spawning additional processes takes time, which is exacerbated in a loop that runs 10, 100, or 1,000 times. Because sed is a relatively large program to fire up just to do some simple text replacement, using the builtin bash functionality is a lot more efficient.
The syntax is not too dissimilar from the sed syntax. Where $datacenter is the variable, and the mission is — again — replacing Wintel with Linux, the sed from the previous line of code would be equivalent to:
echo ${datacenter/Wintel/Linux}
Using Search and Replace
Consider a line in /etc/passwd for a user called Fred. This syntax can be used to change the pattern fred to wilma.
$ user='grep fred /etc/passwd' $ echo $user fred:x:1000:1000:Fred Flintstone:/home/fred:/bin/bash $ echo ${user/fred/wilma} wilma:x:1000:1000:Fred Flintstone:/home/fred:/bin/bash $
This has only changed the first instance of the word fred. To change all instances of fred to wilma, change the first / to a double // (or, as the documentation explains it, add an extra slash to the beginning of the search string). This replaces every instance of the search pattern with the new text.