Replacing String in Bash

This article will show with the aid of examples how the string content can be replaced in bash. Note that knowledge in regex patterns can also be of great value when replacing string in bash.

Bash is a UNIX shell-compatible command process whose main task is to manipulate strings conducted in a shell environment. Programmers are at times called upon to work on different files. They can add, delete, and replace parts or the whole file to fit their work. This calls upon the knowledge of replacing string in bash. Data storage can be temporary or permanent, depending on the nature of the data. File string is essential when replacing file contents.

Replacing String in Bash

sed is vital and comes in handy to aid in replacing strings in a file with bash scripts. The string editor can be used in different ways to replace file contents in bash. An alternate but sound string editor is awk which can be brought into play when replacing string value from a file using bash. This article will show with the aid of examples how the file content can be replaced in bash. Note that knowledge in regex patterns can also be of great value when replacing string in bash.

Bash String Manipulation

When doing minor or simple replacements, the sed is not required. Bash can do the manipulation.

For example:
When replacing a fosslinux.gif with .mp4, sed is not required.
To execute the process using bash, use the coded text below:

#/bin/bash
file_name="fosslinux.gif"
new_extension="mp4"

# Replace .gif with .mp4
generated_file_name=${file_name/.gif/.$new_extension}

echo generated_file_name

Replacing String using sed

sed can be referred to as a stream editor. Sed can replace a string in files. Let’s look at an example of a file called singleboardbytes.txt that has the following information:
Foss Linux is a great learning site for any Linux user. Check out articles published by Foss Linux on their site.

Now from our file, we need to replace the word “site” with “website” and rename the file to fosslinux.txt.

Understanding the sed syntax

sed -i 's/search_string/replace_string/' filename
sed – is the command used in the execution of the above syntax
‘-i’ – used in the modification of contents in the original file with a replacement string aid whenever the search value exists in the file.
‘s’ – this is the substitute command
‘search_string’ – this represents the string value that is to be searched for replacement in the original file
‘replace_string’ – this represents the string value that is used to replace the searched value. The string should match the string found by the ‘search_string’ command.
‘filename’ – this is the filename whereby the replacement will be applied.

Execute the following command in your terminal:

sed 's/site/website/g' singleboardbytes.txt > fosslinux.txt

String Replacement using sed
String Replacement using sed

Note: you can also execute the command above by putting it on as a bash script.
Replacing using the -i command

After running the command, the next step is to replace using the -i command. -i is a representation for “in place”, meaning the file is only replaced, and there is no creation of extra files. Using our example above, run the following command:

sed -i 's/site/website/g' singleboardbytes.txt

Replacing using the -i command
Replacing using the -i command

From the figure below, you can see an exclamation mark that says, The file “/home/tuts/singleboardbytes.txt changed on disk.” this shows that the changes have been successfully made.

Changes made to singleboardbytes.txt
Changes made to singleboardbytes.txt

The figure below is the file containing the changes made in the previous step, both to the name of the file (singleboardbytes.txt to fosslinux.txt) and the word site has been changed to the website.

Final change after running the sed command
Final change after running the sed command

Using a variable as search values and replacements

With a little interpolation, variables can be used to do string replacement. The first sed argument, in this case, has to use double quotes instead of single quotes. For instance, your code will be similar to the one below:

tuts() {
local search=$1
local replace=$2

# Note the double quotes
sed -i "s/${search}/${replace}/g" singleboardbytes.txt
}

Using a variable as search values and replacements
Using a variable as search values and replacements

sed has two flavors, namely: the FreeBSD and the Linux sed. The Linux distros use the Linux sed while OS X users use the FreeBSD sed. These flavors are quite different, and hence one cannot transfer commands from one sed flavor to another.

For instance, while replacing the file’s contents using the FreeBSD, a backup should be conducted using the .bak extension. Or you can initiate a backup with the use of empty pairs of quotes immediately after the -i notation as shown in the bash syntax below:

tuts() {
local search=$1
local replace=$2

sed -i "" "s/${search}/${replace}/g" singleboardbytes.txt
}

If a backup is not done while using the FreeBSD as illustrated in the syntax code above, you will fall into an error like the one shown below:

sed: 1: "/Users/user/path/tuts ...": extra characters at the end of h command

How to replace a file and match the digit pattern using the sed command

If you successfully run the script, a search for all numerical content present in a file will be performed. Then the content will then be replaced by adding $ before the numbers.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string containing digits and add $
sed -i 's/\b[0-9]\{5\}\b/$&/g' $1
fi

Replacing a string using the awk command

In this case, we shall be using the awk command instead of the sed command to replace a file’s contents. The difference among these commands is that the sed command directly updates the original file, which is not the case with the awk command.

#!/bin/bash
# Check the command line argument value exists or not
if [ $1 != "" ]; then
# Search all string based on date
awk '{sub("02/06/2020","12/06/2020")}1' $1 > temp.txt && mv temp.txt $1
fi

Conclusion

The above examples are vital for your progress in learning how to replace a string in Bash. Therefore, to be good at it, you will have to practice regularly. Searching and replacing string in a file might seem complex, but you will find it much more manageable when following our guidelines correctly.

A point to note is that running the commands might at times seem more manageable, but you should be careful not to wreak havoc from sed. When you input the wrong commands, you will break your computer, causing you more trouble like data loss. Hence, to be safe, always copy and paste the code as it is to your terminal. This will prevent spelling errors that might break your machine. We hope this article helped you learn how to replace a string in bash using this article.

Abraham
Abraham is a passionate writer whose desire is to ensure readers get solutions to their problems at ease. He has been in the writing field for the past three years and loves to write tutorials on Linux and computer programming. He spends his free time playing hockey and watching movies.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

STAY CONNECTED

22,905FansLike
430FollowersFollow
16SubscribersSubscribe

LATEST ARTICLES

MUST READ

EndeavourOS is an extremely recent distro in the Linux space released back in July 2019 as a spiritual successor to Antergos Linux, which was also discontinued in May 2019. In function, it is a rolling release distro based on Arch Linux with a focus on delivering a beginner-friendly pre-configured desktop environment to its users.
If we look at today's market, there are plenty of laptops available from different companies. The laptops differ in various ways, such as specifications, models, functionality, and many more. The common thing about all the laptop regardless of the type and functionality is that they all have operating systems that power the laptops. There are a variety of operating systems, the common ones being Windows, Linux, and macOS.