Skip to main content

Sed - Stream Editor

· 2 min read
Max Kaido
Architect

Sed is a powerful stream editor for filtering and transforming text. It's especially useful for automated text manipulation and find-and-replace operations.

Key Features

  • Line-based text processing
  • Regular expression support
  • In-place file editing
  • Multiple commands in sequence
  • Automated text transformations

Common Usage

Basic Substitution

sed 's/old/new/'           # Replace first occurrence in each line
sed 's/old/new/g' # Replace all occurrences
sed 's/old/new/gi' # Replace all occurrences, case-insensitive

In-Place Editing

sed -i 's/old/new/g' file.txt     # Edit file in-place
sed -i.bak 's/old/new/g' file.txt # Create backup before editing

Line Operations

sed '1d'                   # Delete first line
sed '$d' # Delete last line
sed '1,5d' # Delete lines 1-5
sed '/pattern/d' # Delete lines matching pattern

Advanced Features

sed -n '5p'               # Print only line 5
sed -n '5,10p' # Print lines 5-10
sed '/start/,/end/p' # Print lines between patterns

Pro Tips

  1. Multiple Commands:

    sed -e 's/old/new/' -e 's/foo/bar/'  # Multiple substitutions
    sed 's/old/new/; s/foo/bar/' # Alternative syntax
  2. Using Variables:

    pattern="old"
    sed "s/$pattern/new/g" # Use double quotes for variables
  3. Working with Files:

    sed 's/old/new/g' file1 file2        # Process multiple files
    sed -i.$(date +%Y%m%d) 's/old/new/g' # Dated backups

Common Patterns

Text Manipulation

# Add text
sed 's/^/prefix /' # Add prefix to each line
sed 's/$/ suffix/' # Add suffix to each line

# Remove text
sed 's/pattern//g' # Remove all occurrences
sed 's/^[ \t]*//' # Remove leading whitespace
sed 's/[ \t]*$//' # Remove trailing whitespace

# Transform text
sed 's/\([0-9]\)/[\1]/g' # Wrap digits in brackets
sed 's/.*/\U&/' # Convert line to uppercase

Working with Code

# Comment/Uncomment
sed 's/^#//' # Uncomment lines
sed 's/^/#/' # Comment lines
sed '/^$/d' # Remove empty lines

# JSON manipulation
sed 's/"/\\"/g' # Escape quotes
sed 's/\\n/\n/g' # Convert \n to newlines

Complex Operations

# Conditional replacement
sed '/pattern/s/old/new/' # Replace only in lines matching pattern

# Multi-line operations
sed ':a;N;$!ba;s/\n/ /g' # Join all lines
sed 'N;s/\n/ /' # Join pairs of lines

Advanced Techniques

Using Address Ranges

sed '2,5s/old/new/'      # Lines 2-5
sed '/start/,/end/s/old/new/' # Between patterns
sed '2,+3s/old/new/' # Line 2 and next 3 lines

Using Hold Space

# Reverse line order
sed '1!G;h;$!d'

# Double space output
sed 'G'

# Number lines
sed = file | sed 'N;s/\n/\t/'

Regular Expression Features

sed 's/[0-9]\{3\}/XXX/'  # Replace 3 digits with XXX
sed 's/\(foo\).*\(bar\)/\2 \1/' # Backreferences
sed 's/[[:space:]]\+/ /g' # Normalize whitespace

Integration Examples

With Find

find . -type f -name "*.txt" -exec sed -i 's/old/new/g' {} +

With Git

git ls-files '*.js' | xargs sed -i 's/old/new/g'

In Scripts

#!/bin/bash
# Safe sed with error checking
if ! sed -i.bak 's/old/new/g' file.txt; then
echo "Sed operation failed"
mv file.txt.bak file.txt
exit 1
fi