Find and replace in 50 config files? sed -i says “hold my coffee” while your text editor is still loading.

Basic inline replacement

1
2
3
4
5
6
7
8
# Replace first occurrence per line
sed -i 's/old-text/new-text/' file.txt

# Replace all occurrences (global)
sed -i 's/old-text/new-text/g' file.txt

# Replace in multiple files
sed -i 's/old-text/new-text/g' *.txt

With backup

1
2
3
4
5
# Create .bak backup before replacing
sed -i.bak 's/old-text/new-text/g' file.txt

# Custom backup extension
sed -i.orig 's/old-text/new-text/g' file.txt

Common patterns

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Replace entire line containing pattern
sed -i '/pattern/c\New line content' file.txt

# Delete lines matching pattern
sed -i '/pattern/d' file.txt

# Replace only on specific line number
sed -i '5s/old/new/' file.txt

# Replace in range of lines (5-10)
sed -i '5,10s/old/new/g' file.txt

Special characters escaping

1
2
3
4
5
# Replace forward slashes (use different delimiter)
sed -i 's|/old/path|/new/path|g' file.txt

# Replace with regex
sed -i 's/[0-9]\+/NUMBER/g' file.txt

macOS compatibility

On macOS, -i requires an argument:

1
2
3
4
5
# With backup
sed -i .bak 's/old/new/g' file.txt

# Without backup (note the empty string)
sed -i '' 's/old/new/g' file.txt