Skip to content

How to Remove Substrings Using ${} in Bash Scripts

Advertisement

String manipulation is an important skill for programmers. It helps you work more effectively. In Bash, removing parts of strings is a common task. This guide will show you how to remove parts of strings using Parameter Expansion “${}” in Bash scripts.

1. Understanding String Manipulation in Bash

Bash is a Unix shell and command-line tool. It is the default shell for Linux and macOS. Bash offers various ways to manipulate strings, like joining, replacing, and expanding them. One powerful method is parameter expansion, shown as ${}.

2. Removing Substrings Using Parameter Expansion

Parameter expansion lets you do many operations on strings, such as removing, replacing, and extracting parts of strings. This guide focuses on removing parts of strings.

2.1. Removing Prefixes

To remove the start of a string, use this syntax:


{variable#substring}

This removes the shortest match of the substring from the start. To remove the longest match, use:


${variable##substring}

b. Removing Suffixes

To remove the end of a string, use this syntax:


${variable%substring}

This removes the shortest match of the substring from the end. To remove the longest match, use:


${variable%%substring}

3. Practical Examples

Here are some examples to help you understand how to remove parts of strings in different situations.

Example 1: Remove file extension

To remove the file extension from a filename:


filename="example.txt"
basename="${filename%.*}"
echo "Basename: $basename"

This removes the shortest match of .* from the end of the filename. The script outputs the filename without the extension:

Output:
Basename: example

Example 2: Remove a directory prefix

To remove the directory part of a file path:


full_path="/home/user/documents/file.txt"
relative_path="${full_path#/home/user/}"
echo "Relative path: $relative_path"

This removes the “/home/user/” part from full_path. The script outputs the path without the directory prefix:

Output:
Relative path: documents/file.txt

Example 3: Remove a protocol from a URL

To remove the protocol (e.g., “https://”) from a URL:


url="https://www.example.com"
domain="${url##*://}"
echo "Domain: $domain"

This removes the longest match of *:// from the start of the URL. The script outputs the domain without the protocol:

Output:
Domain: www.example.com

Example 4: Remove domain from email

To remove the domain from an email address:


email="user@example.com"
username="${email%@*}"
echo "Username: $username"

This removes the shortest match of @* from the email address. The script outputs the username without the domain:

Output:
Username: user

Example 5: Remove country code from phone number

To remove the country code from a phone number:


phone="+1-123-456-7890"
local_number="${phone#+*-}"
echo "Local number: $local_number"

This removes the “+1-“ part from the phone number. The script outputs the phone number without the country code:

Output:
Local number: 123-456-7890

These examples show how to remove parts of strings in Bash scripts. You can adapt these methods to your own needs.

4. Understanding Shortest Match vs Longest Match Substring

When removing parts of strings with parameter expansion, “shortest match” and “longest match” refer to how much of the string is removed.

Shortest match:

Using a single ‘#’ (for start) or a single ‘%’ (for end) removes the shortest matching part.

Example:


string="programming_programming_programming"
substring="${string#*_}"
echo "Shortest match: $substring"

This removes the shortest match of *_ from the start. The script outputs:

Output:
Shortest match: programming_programming

Longest match:

Using a double ‘##’ (for start) or a double ‘%%’ (for end) removes the longest matching part.

Example:


string="programming_programming_programming"
substring="${string##*_}"
echo "Longest match: $substring"

This removes the longest match of *_ from the start. The script outputs:

Output:
Longest match: programming

5. Additional Tips and Tricks

  • Use * to represent any sequence of characters in the substring.
  • Combine parameter expansion with other string techniques for complex operations.
  • Test your scripts with different data to ensure they work as expected.

Conclusion

Learning how to manipulate strings in Bash, especially removing parts using ${}, will improve your scripting skills. By understanding how to remove prefixes and suffixes and practicing with real examples, you’ll get better at string manipulation and overall programming.

Rahul

I, Rahul Kumar am the founder and chief editor of TecAdmin.net. I am a Red Hat Certified Engineer (RHCE) and working as an IT professional since 2009..

Leave a Reply

Your email address will not be published. Required fields are marked *


Back to top