Course contentsShow
← Linux
Lesson 148 of 1,8192. Deep Dive into Bash ScriptingFree lesson

Delimiter-Aware String Tokenization

Parse complex input strings with non-standard separator characters.

Delimiter-Aware String Tokenization

In this lesson, you will learn how to extract specific segments from a string when your data uses non-standard separators instead of simple spaces.

The Problem with Default Parsing

By default, Bash treats any sequence of characters in the IFS (Internal Field Separator) variable as a "word break." When you use a simple for loop or read command, Bash splits strings based on spaces, tabs, or newlines. However, real-world data is rarely that tidy. Imagine you have a data string separated by pipes (|), colons (:), or even semicolons (;) that you need to parse into individual variables.

Using the IFS Variable

The most efficient way to handle non-standard delimiters is to temporarily redefine the IFS variable. Because IFS determines exactly where Bash "chops" a string, setting it to your specific character allows you to use the read command to tokenize the input instantly.

Consider a configuration string where values are separated by a pipe: data="user|admin|active"

If you simply run read var1 var2 var3 <<< "$data", Bash will fail because it’s looking for spaces. Instead, you modify IFS locally:

data="user|admin|active"

# Set IFS to | specifically for this command
IFS='|' read -r user role status <<< "$data"

echo "User: $user, Role: $role, Status: $status"

Why This Works

The read command is "delimiter-aware." By setting IFS='|', you tell the shell: "Ignore spaces; only create a new token when you hit a pipe character."

Crucially, by wrapping this in a single line, the change to IFS is scoped only to that read command. This avoids breaking other parts of your script that rely on the default space-based splitting. This technique is significantly faster and more readable than complex regex transformations or external tools like awk when you are performing simple, structural extraction.

Key Takeaway: To parse strings with custom delimiters, temporarily set the IFS variable immediately before your read command to define your own breaking points.