String Manipulation in Bash

In bash scripting, string manipulation is a process of performing several operations to use and modify the value of a given string. For creating dynamic scripts, parsing information, and task automation, string manipulation is an important concept. Dive into the article to understand bash string manipulation and its multiple processes.

What is String Manipulation in Bash?

In bash scripting, a string is a sequence of characters that is enclosed by either a single quote, double quote, or even no quotations. String manipulation refers to shaping and modifying the textual data according to your will. A bash user needs to know about string manipulation to convert the string case and type, search a specific part of a substring from a large string, or even replace and remove a specific part of a string.

9 Practical Cases of String Manipulation in Bash

There are two ways to manipulate a string one is fundamental bash techniques such as parameter expansion, length of string, and string extraction and another is using powerful external commands like awk, sed, cut, and tr. In this section, 9 practical cases of string manipulation will be discussed. Explore the section to learn string manipulation.

1. Convert Bash String to Integer Value

Attempting to transform a string into an integer, successful conversion is only achievable for strings that exclusively consist of numerical characters. If you try to convert a string that contains non-numeric elements or pure string into an integer, the conversion will not result in numerical values. To convert a string to an integer, follow the script below:

#!/bin/bash

string_number="123"
integer_number=$(expr "$string_number" + 0)

echo "Integer: $integer_number"
EXPLANATION

Firstly the script declares a number as a string in a variable string_number. Then in integer_number=$(expr "$string_number" + 0) theexprcommand converts the string into a number. Adding0with the string forces bash to interpret the string as an integer and perform the arithmetic expression. Later, the echo command prints the string as a number into the terminal.

Convert a numeric string into integer value in bash The output shows the script converts the string to its integer value.

2. String Case Conversion in Bash

Case conversion refers to converting the case of the character in the string from upper case to lower case and lower case to upper case. When you need to change the case of a character,  you can follow the methods below:

i. Convert String to Lowercase

To convert the upper case character with a lower case character, you can use the tr command. In bash scripting, the tr command is used to translate and delete characters. Take a look at the following code to convert a string from upper case to lower case:

#!/bin/bash

Original_string="HELLO WORLD"
lowercase_string=$(echo "$Original_string" | tr '[:upper:]' '[:lower:]')

echo "Original String: $Original_string"
echo "Lowercase String: $lowercase_string"
EXPLANATION

At first, the bash script declares a string in a variable namedOriginal_string. In the lowercase_string=$(echo "$Original_string" | tr '[:upper:]' '[:lower:]'), the | (pipe) symbol pipes the output of theechocommand to thetrcommand. Then the tr command matches the upper-case characters and replaces them with lowercase characters.

Convert a string to lowercase in bash

From the output, you can see the script converts the characters from upper case to lower case.

Note: The eval is a powerful tool and a part of the POSIX. It acts as an interface either as a shell built-in or external command. Here I have shown an example of converting the case of a string using eval:

#!/bin/bash

Original_string="HELLO WORLD"

conversion_command='tr "[:upper:]" "[:lower:]"'
eval "lowercase_string=\$(echo \"$Original_string\" | $conversion_command)"


echo "Original String: $Original_string"
echo "Lowercase String: $lowercase_string"

#Output: Original String: HELLO WORLD
#Lowercase String: hello world

The eval will dynamically execute a string as a shell command. Here the string is lowercase_string=\$(echo \"$Original_string\" | $conversion_command). So the script returns the output of the string that is declared after the eval and prints it using the echo command.

ii. Convert String to Uppercase

To convert the characters of a string from lowercase to uppercase, use the following code:

#!/bin/bash

lowercase="hello world"
uppercase=$(echo "$lowercase" | tr '[:lower:]' '[:upper:]')

echo "Uppercase: $uppercase"
EXPLANATION

The|(pipe) operator takes the echocommand output as input for thetrcommand. In the tr '[:lower:]' '[:upper:]', the tr command translates the lower-case characters into uppercase characters.

Convert a string from lower case to uppercase in bash

The output shows the script successfully converts the case from lower case to upper case.

3. Replace Specific Characters of Bash String

To replace a specific character in a string with your desired character you can use the sed command. Check the following bash script:

#!/bin/bash

Main_string="Hello World"
New_string=$(echo "$Main_string" | sed -e 's/H/h/g' -e 's/W/w/g')

echo "Main_string:" $Main_string
echo "Modified_string:" $New_string
EXPLANATION

Firstly the bash script declares a string in a variable namedMain_string. Then in the $(echo "$Main_string" | sed -e 's/H/h/g' -e 's/W/w/g'), the pipe operator takes the output of the echo command and pipes it as input to the sed command. Thesedcommand replaces the H withhandWwithwglobally. Later, the bash script stores the modified string in the New_string variable.

Replace a specific character in a string in bash

The output shows that the script replaces the first character of the words from upper case to lower case.

Replace a Substring with Another String:

To replace a set of characters or substrings from a string, you can copy the following script:

#!/bin/bash

if [ "$#" -ne 3 ]; then
echo "Usage: $0 <original_string> <substring_to_replace> <replacement_string>
exit 1
fi

original_string="$1"
substring_to_replace="$2"
replacement_string="$3"

new_string=$(echo "$original_string" | sed "s/$substring_to_replace/$replacment_string/g"

echo "The original_string:$original_string"
echo "The substring to replace:$substring_to_replace"
echo "The replaced_string:$replacement_string"
echo "The new string:$new_string"
EXPLANATION

At first the if block checks whether the input has three arguments or not. If not then it shows a usage message and exits. Otherwise, the script assigns the first, second, and third arguments to the variables named original_string,substring_to_replace, and replacement_string respectively. Later, thesed command replaces the substring with the replacement_string.

Replace a sub-string with another string in bash

From the image you can see, that the script takes the input of the original_string, then the substring_to_replace, and later the replacement_string. And returns the modified output of the original_string.

4. Cut a Substring from a String in Bash

To cut or extract a specific substring, you can use the cut command. In bash, the script uses the cut command to extract a specific section from a line of the input. The basic syntax of the cut command is cut [option] [file].

Follow the script below to cut a Bash string:

#!/bin/bash

original_string="Today is $(date)"
substring=$(echo "$original_string" | cut -c 9-40)

echo "Original String: $original_string"
echo "Substring: $substring"
EXPLANATION

At first, the $(echo "$original_string" | cut -c 9-40), extracts a string from the original_string. Then the pipe operator takes the output of the echo command to the cut command. After moving to the cut command, the bash script uses the -c option that specifies substring extraction based on position. Finally, the cut command extracts a substring from the 9th to the 40th position.

Extract a specific string using cut command

The script returns the current date which is a part of the original string.

Truncate Bash String

Truncating refers to shorting or cutting a string to a desired length or size. As you can cut a string to extract a substring, you can also extract a specific size from a string. To truncate a bash string into a specific size, check the following script:

#!/bin/bash

original_string="This is a long string with some special characters: áéíóú"

# Set the desired byte length
max_bytes=20

# Truncate the string into the specified byte length
truncated_string=$(echo -n "$original_string" | cut -c1-"$max_bytes")

echo "Original String: $original_string"
echo "Truncated String: $truncated_string"
EXPLANATION

Initially, the bash script declares a string namedoriginal_string. Then the script sets the byte length into a variable named max_bytes which is set at20bytes. Finally, the cut command extracts characters from the beginning to the max_byte.

Truncate a string to a specific size

From the output, you can see the script returns a truncated string size 20 bytes.

5. Trim White-Spaces from Bash String

In Bash scripting, trimming is the process of removing the whitespaces from the beginning and end of a string. If you have a string that contains unexpected white spaces, then you can follow the script to trim the string:

#!/bin/bash

original_string="   Hello, World!   "

trimmed_string="${original_string#"${original_string%%[![:space:]]*}"}"
trimmed_string="${trimmed_string%"${trimmed_string##*[![:space:]]}"}"

echo "Original String: '$original_string'"
echo "Trimmed String: '$trimmed_string'"
EXPLANATION

The bash script declares a string named original_string which contains leading and trailing spaces. Here, the${original_string%%[![:space:]]*}will remove the leading space. Moving to the next syntax, the${trimmed_string##*[![:space:]]}will delete the trailing spaces.

Trim the trailing and leading spaces of a string in bash

The output of the script shows the string does not contain any leading and trailing spaces anymore.

6. Remove the First Character of a String

To remove a specific character from a string you can use thesedcommand. Use the following script for a practical approach:

#!/bin/bash

new_string="Removing the first character."

echo "Original String: $new_string"
echo "$new_string" | sed 's/^.//'
EXPLANATION

In the "$new_string" | sed 's/^.//' syntax, the sed command removes the first character of the echo command’s output. Here, the ^. finds the first character and then removes it using //.

Remove the first character in a string

The output shows the returned string from the script does not contain the first character.

Remove the Last Character of a String

To remove the last character from a string, you can use the same script as before, which you used for removing the first character. Only you have to replace the^.with$.to remove the last character. Check the following script below:

#!/bin/bash

new_string="Is it the last character?"

echo "Original_string: $new_string"
echo "$new_string" | sed 's/.$//'
EXPLANATION

The "$new_string" | sed 's/.$//' syntax removes the last character of the input string. In the sed command, .$ finds the last character and removes it.

Remove the last character in a string in bash

The script successfully removes the last character from the input string.

7. Generate a Random String in Bash

The random string refers to the sequence of random characters which is important for uniqueness, security, and cryptographic operations. To generate a string, follow the script below:

#!/bin/bash

random_string=$(echo "$RANDOM" | md5sum | cut -c 1-10)

echo "$random_string"
EXPLANATION

At first, the$RANDOMcreates a random number between 0 to 32767. Then the script prints the random number using theechocommand. The|operator pipes the output to the md5sum command which will calculate a 128-bit MD5 sum check. Later the output of the md5sum is piped to the cut command that will extract characters from 1 to 10 position.

Generate a random string in bash

From the output, you can see the script generates a random string.

As you learned to generate a random string, next let’s see how you can write and save a string to a file. Take a look at the following process of how to write a string to a file:

#!/bin/bash 

# Writing a string to a file, overwriting its content if the file exists 
echo "Hello, World!" > output.txt 

# Appending a string to a file 
echo "This is a new line." >> output.txt
EXPLANATION

Firstly the redirection operator > redirects the output to a new file named output.txt. If there is no existing file named output.txt then the script will create a new txt file otherwise it will overwrite the existing file. Then the>>operator appends a new string to the existing file.

To see the content of the new file, use the following code:

cat output.txt

Write new line to a file

The output shows the script writes a new line “Hello, World!” to a file. Then it appends another line to that existing file.

8. Manipulate Bash String Arrays

A string array is a collection of multiple string values that are in a single variable entity. It is important for data storage, file handling, and data validation and verification. Here I will show how to declare, access, print, and iterate the elements of a string array. Check the script below:

#!/bin/bash

# Declare an array
my_array=("apple" "banana" "orange" "grape")

# Access elements by index
echo "First element: ${my_array[0]}"
echo "Second element: ${my_array[1]}"

# Print all elements
echo "All elements: ${my_array[@]}"

# Iterate over elements
echo "Iterating over elements:"

for fruit in "${my_array[@]}"; do
echo "$fruit"
done

# Get the length of the array
array_length=${#my_array[@]}
echo "Array length: $array_length"
EXPLANATION

At first, the bash script declares an array with four elements in a variable named my_array. After that with the${my_array[0]}syntax, the script prints the first elements of the array. Also with the${my_array[@]}syntax, it prints all the elements of the array. To iterate over elements, the script uses the for loop. With each iteration, the loop will print one element. Lastly, with the {#my_array[@]}syntax, the script finds the length of the string.

Manipulate a bash string array

The image shows all the outputs of the script which includes the accessed elements, iterating output values, and the length of the array.

9. Extract the First Character of a Bash String

To extract the first character of a string, you can use parameter expansion. Inside the curly bracket use the variable from which you want to extract the character and specify the extraction position and length of the extracted characters. Follow the script that has been shown below:

#!/bin/bash

str="The username."
char=${str:0:1}

echo $char
EXPLANATION

The${str:0:1}syntax, will print the first character of the input string. It shows the extraction starts at the0position and it extracts one character as the length is set at 1.

extract the first character of a string in bash The script extracts the first character T from the input string.

Conclusion

The article shows a detailed overview of string manipulation that will help you understand the process of handling and modifying a string efficiently. Mastering string manipulation unlocks the collection of text data processing and analysis. Hope this article clears your concept of string manipulation and empowers your work with textual data.

People Also Ask

What is string manipulation in shell scripting?

In bash shell scripting, string manipulation refers to performing various operations using fundamental bash techniques and external commands to modify the string according to your preference.

How do you manipulate variables in Bash?

To manipulate variables in bash you can use parameter expansion to access, match patterns, and extract a specific part from the variable. To compare two variables you can also be able to use the conditional operator. In bash scripting external commands like awk, sed, and tr also enrich your ability to manipulate variables.

How to find the length of a string?

To find the length of a string you can use the # operator with parameter expansion. The syntax of the expansion is {#String} where the String is a variable that stores the input string. Check the script to find the length of a string:

#!/bin/bash

String="This is the new string. The length of the string has been calculated."
length="${#String}"

echo "The length of the string is: $length"

#Output: The length of the string is: 69

How to concatenate two strings in bash?

To concatenate two strings in bash you can use the += operator. Without changing the existing string, the += operator mainly appends the new string to the right of the existing string. Follow the script to concatenate strings:

#!/bin/bash

echo "Using Simple Concatenation"
string="Hello"
string+="1234"
concatenated_string="$string"

echo "Concatenated String:$concatenated_string"

#Output:Using Simple Concatenation
#Concatenated String:Hello1234

How can I reverse a string?

To reverse a string use the rev command. The rev command reverses each character of a file or the output of the left-hand side command of the pipe operator. Follow the script to reverse a string:

#!/bin/bash 

original_string="Hello, World!" 
reversed_string=$(echo "$original_string" | rev) 

echo "Original String: $original_string" 
echo "Reversed String: $reversed_string" 

#Output:Original String: Hello, World! 
#Reversed String: !dlroW ,olleH

Related Articles


<< Go Back to Bash String | Bash Scripting Tutorial

5/5 - (2 votes)
LINUX
FUNDAMENTALS
A Complete Guide for Beginners Enroll Course Now
Afia Zahin Oishi

Assalamualaikum, I am Afia Zahin, completed my graduation in Biomedical Engineering from Bangladesh University of Engineering and Technology, currently working as a Linux Content Developer Executive at SOFTEKO. A high achieving professional with a strong work ethic and able to work in a team in order to consistently achieve my goal and build my skillset. Able to handle difficult problems with patience and swift decision-making. Read Full Bio

Leave a Comment