Sed - Stream Editor
· 2 min read
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
-
Multiple Commands:
sed -e 's/old/new/' -e 's/foo/bar/' # Multiple substitutions
sed 's/old/new/; s/foo/bar/' # Alternative syntax -
Using Variables:
pattern="old"
sed "s/$pattern/new/g" # Use double quotes for variables -
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
