If you’re managing Linux servers or working on scripts, eventually you’ll hit the same wall many of us do:
“I need to edit a bunch of text automatically, but I don’t want to open a text editor 50 times.”
That’s exactly where sed (the stream editor) comes in. It looks weird at first, but once you get the basics, it becomes a very handy tool in your toolbox.
In this guide, we’ll walk through the fundamentals of using sed in a safe and practical way, especially if you’re new to it.
What sed Actually Does (and Why It Feels Weird)
sed is a non-interactive line editor. That means:
- It reads text line by line
- You tell it ahead of time what to do
- It runs those instructions automatically
- It does not open an editor window
So instead of:
– Opening nano or vim
– Moving your cursor around
– Editing stuff by hand
You run a command like:
sed 'commands' file
…and sed applies your instructions as it reads each line.
Important detail: by default, sed sends its output to STDOUT, not back to the file. So unless you redirect or use other tools around it, it just prints the modified text to your screen.
Also, the tutorial this is based on uses GNU sed, the version you’ll find on Ubuntu and many Linux distros.
Basic sed Command Structure
The general pattern looks like this:
sed [options] commands [file-to-edit]
Pieces:
sed– the program[options]– flags you can add (none are strictly required for basic use)commands– what you wantsedto do[file-to-edit]– optional; if omitted,sedreads from standard input (STDIN)
You can use sed in two main ways:
-
With a file:
bash
sed 'commands' BSD -
With a pipe from another command:
bash
some-command | sed 'commands'
In both cases, sed reads the text, applies your instructions, and prints the result to STDOUT.
Set Up a Safe Test File First
Never experiment on important config files first. Make a test file and break that instead.
The original tutorial uses the BSD Software License as a practice file. On Ubuntu, you can copy it like this:
cd
cp /usr/share/common-licenses/BSD .
This will copy the BSD license file into your home directory. You can safely mess with it.
If you don’t have that file, just make one manually:
cat << 'EOF' > BSD
Copyright (c) The Regents of the University of California.
All rights reserved.
Redistribution...
EOF
Now you have a simple BSD file in your home directory you can test with.
Why this matters:
– You avoid trashing real config files
– You can rerun commands as many times as you like
Reading from Files vs Standard Input (STDIN)
sed can read from:
- A file you name directly
- Standard input, meaning data passed from another command or typed in
1. Using sed on a file
From your home directory where the BSD file lives, run:
sed '' BSD
That empty pair of quotes is a bit of a no-op (it means “no command”). In practice, you’ll usually give sed an actual command, but the important bit is: this reads from the file and prints to the screen.
Any time you do:
sed 'something' BSD
sed:
– Reads BSD line by line
– Applies 'something' to each line
– Prints all resulting lines to STDOUT
2. Using sed with STDIN
You can also pipe text into sed instead of naming a file.
For example, using cat:
cat BSD | sed 'commands'
Or even typing lines manually (press Ctrl+D when you’re done):
sed 'commands'
Type some text here
And another line
Ctrl+D
In both cases, sed treats that incoming text as its input stream.
Key idea: sed doesn’t really care where the text comes from. File or pipe, it’s just a stream.
Understanding sed’s Output Behavior (Very Important)
By default, sed prints everything to STDOUT.
That means if you run:
sed 'commands' BSD
You are not changing the BSD file. You’re just seeing a modified version of it in your terminal.
If you close your terminal and reopen the file in a regular editor, it’s unchanged.
This default behavior is actually safe and nice when you’re learning:
- You can try a command
- See what it would do
- If it looks wrong, no harm done
If you want to capture the output into a new file, you can use shell redirection:
sed 'commands' BSD > BSD.new
Now you have:
– BSD – original
– BSD.new – edited copy
You can then compare them, and if you’re happy, replace the original.
Safe Workflow: Testing sed Without Breaking Things
When you’re learning sed, here’s a simple, low-stress workflow.
Step 1: Work in your home directory
Make sure you’re not in /etc or some other dangerous spot:
cd
Step 2: Use a disposable test file (like BSD)
Either copy from the system location:
cp /usr/share/common-licenses/BSD .
Or create your own simple file named BSD.
Step 3: Run sed and just look at the output
For example:
sed 'commands' BSD
No redirection, no overwriting, just observing.
If the output looks wrong, change your commands and try again.
Step 4: Save to a new file when you’re happy
Once your sed result looks good:
sed 'commands' BSD > BSD.modified
Now inspect BSD.modified with your normal editor if you like.
Step 5: Replace the original (only when confident)
When you’re sure:
mv BSD BSD.backup
mv BSD.modified BSD
You’ve:
– Kept a backup (BSD.backup)
– Updated the original (BSD) with your edited version
This style of workflow is much safer than trying to directly modify sensitive files.
Using sed in Scripts and Automation
Where sed really shines is in scripts and automated workflows.
Because it:
– Reads from STDIN
– Writes to STDOUT
– Doesn’t ask for interactive input
You can easily chain it with other commands.
For example, you can imagine patterns like:
some-command-producing-text | sed 'commands' > output.txt
Or using it inside a shell script as one of several steps.
You define all your editing rules up front, then let sed run through the entire stream automatically. That’s much faster and more consistent than manual editing, especially when you need to repeat the process.
You almost certainly won’t replace your normal text editor with sed, but it’s a great addition alongside it: editor for one-off manual edits, sed for repeatable text transformations.
Quick Recap and Next Step
To wrap up, here’s what to remember about sed from this basic overview:
sedis a non-interactive stream editor that works line-by-line- It reads from files or STDIN
- It prints everything to STDOUT by default, so your files stay unchanged unless you redirect
- It’s ideal for scripts and automated workflows where you know your editing rules ahead of time
- Always practice on a copy (like the
BSDfile) before touching real config files
Once you’re comfortable with this flow—input, commands, output—you’re ready to start exploring actual sed editing commands on top of this foundation.
If this saved you time, bookmark CrushEdge for more fixes.
No Comments