How to substitute an environment variable using sed on Linux?

Environment variables are dynamic named values that store system configuration and user-defined settings. They can be exported in a terminal session or stored in shell configuration files for persistent access across all terminals. The sed (stream editor) command provides a powerful way to modify environment variable values within files programmatically.

Understanding sed Command

The sed command is a stream editor used to perform various text manipulation operations like find, replace, insert, and delete on files or input streams. It processes text line by line and applies specified transformations.

Syntax

sed [OPTIONS]... [SCRIPT] [INPUTFILE...]

Basic String Replacement Example

Let's start with a simple example to understand how sed works before applying it to environment variables.

Sample File Content

$ cat somefile.txt
this is a test file and it is used for testing and is not available for anything else so
please stop asking, lionel messi

Replace String with sed

sed 's/it/litt/g' somefile.txt

Output

this is a test file and litt is used for testing and is not available for anything else so
please stop asking, lionel messi

Substituting Environment Variables

To substitute environment variables using sed, we need to properly handle variable expansion and choose appropriate delimiters to avoid conflicts with special characters in paths.

Method 1: Using Alternative Delimiters

When working with paths (common in environment variables), use @ or | as delimiters instead of / to avoid conflicts:

# Set environment variable
export TUTS="/Users/tutorial"

# Substitute placeholder with environment variable value
echo "PPP/documents" | sed "s@PPP@$TUTS@g"

Method 2: Double Quotes for Variable Expansion

Use double quotes to allow shell variable expansion within the sed command:

# Replace placeholder in file with environment variable
sed "s|PLACEHOLDER|$HOME|g" config.txt

Method 3: Escaping Special Characters

For variables containing special regex characters, escape them properly:

# Escape special characters in the variable
ESCAPED_VAR=$(echo "$MYVAR" | sed 's/[[\.*^$()+?{|]/\&/g')
sed "s/PLACEHOLDER/$ESCAPED_VAR/g" file.txt

Practical Examples

Example 1: Updating Configuration Files

# Update database path in configuration
export DB_PATH="/opt/database"
sed -i "s|/tmp/database|$DB_PATH|g" app.conf

Example 2: Batch Processing Multiple Files

# Replace home directory placeholder in multiple files
export USER_HOME="/home/username"
find . -name "*.conf" -exec sed -i "s|HOME_DIR|$USER_HOME|g" {} \;

Common Pitfalls and Solutions

Issue Problem Solution
Path Conflicts Forward slashes in paths conflict with sed delimiter Use alternative delimiters like @ or |
Variable Expansion Single quotes prevent variable expansion Use double quotes around sed expression
Special Characters Regex metacharacters in variables cause errors Escape special characters before substitution

Conclusion

Using sed to substitute environment variables requires careful attention to delimiters and quoting. Choose appropriate delimiters to avoid conflicts with variable content, use double quotes for proper variable expansion, and escape special characters when necessary for reliable text manipulation.

Updated on: 2026-03-17T09:01:38+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements