How to Replace Substring from String - Bash
In this short article, we will see how to replace a string with another in bash script. We will cover multiple examples and situations.
Suppose we have 3 variables:
text="Hello World!"
repl="Bash"
str_find="World"
where:
text
- the main string from which we will replacerepl
- the new string / replacementstr_find
- the search pattern which will be replaced
The image below shows most examples and results of string replacement in bash:
Replace substring with new in string
We use the following syntax to replace string in Bash:
${text/pattern/replacement}
Example of replacing string with /
:
text="Hello World! World!"
repl="Bash"
str_find="World"
echo "${text/$str_find/"$repl"}"
In this example we get:
Hello Bash! World!
The code above will replace only the first match. To replace all occurrences, check the next solution.
bash replace all occurrences string
echo "${text//$str_find/"$repl"}"
To replace all occurrences of substring in text we need to use Bash operator - //
.
replace string by sed
result=$(echo "$text" | sed "s/$str_find/$repl/")
sed - replace all occurrences
by adding g
at the end of the sed
command we can replace all occurrences of given pattern in a string
result=$(echo "$text" | sed "s/$str_find/$repl/g")
replace string by empty string
echo "${text//$str_find/""}"
or
repl=""
echo "${text/$str_find/"$repl"}"
regex: search and replace
We can use regex to replace all letters or numbers from string in bash:
text="Hello World! 735!"
echo ${text//[a-zA-Z]/W}
echo ${text//[0-9]/N}
The new string after the replacements looks like
WWWWW WWWWW! 735!
Hello World! NNN!
regex + sed: search and replace
We can use regex to search for a pattern and replace all matches in bash script:
text="Hello World! 735!"
echo "$text" | sed -e 's/[a-zA-Z]/W/g' -e 's/[0-9]/N/g'
the result is replace all letters with W and digits by D:
WWWWW WWWWW! NNN!
replace all newlines to space
text="line 1
line 2
end"
echo "${text//$'\n'/ ;}"
result:
line 1 ;line 2; end