Learn Linux

Replacing String in Bash

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

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

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

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

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

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.

Gry Vulkan for Linux Users
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
Gry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
Gry OpenTTD Tutorial
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...