SED

SED

Sed is a Stream Editor used for modifying the files in unix (or linux)

Features of sed

Consider the below file for as example for our practice

$ cat file.txt 
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

Replacing or substituting string

$ sed 's/unix/linux/' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free os
linux
linux
learn os
open source

Here the s specifies the substitution operation. The / are delimiters. The unix is the search pattern and the linux is the replacement string.

By default, the sed command replaces the first occurrence of the pattern in each line and it won’t replace the second, third…occurrence in the line.

Replacing the nth occurrence of a pattern in a line

Use the /1, /2 etc flags to replace the first, second occurrence of a pattern in a line. The below command replaces the second occurrence of the word unix with linux in a line

$ sed 's/unix/linux/2' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. linux is free os
unix
linux
learn os
open source
$ sed 's/unix/linux/1' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free os
linux
linux
learn os
open source

Replacing all the occurrence of the pattern in a line.

The substitute flag /g (global replacement) specifies the sed command to replace all the occurrences of the string in the line.

$ sed 's/unix/linux/g' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. linux is free os
linux
linux
learn os
open source

Replacing from nth occurrence to all occurrences in a line.

Use the combination of /1, /2 etc and /g to replace all the patterns from the nth occurrence of a pattern in a line. The following sed command replaces the third, fourth, fifth… “unix” word with “linux” word in a line.

$ sed 's/unix/linux/3g' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

Changing the slash (/) delimiter

You can use any delimiter other than the slash. As an example if you want to change the web url to another url as

$ cat file.txt 
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
http://
https://www
$ sed 's/http:\/\//www/' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
www
https://www

In this case the url consists the delimiter character which we used. In that case you have to escape the slash with backslash character, otherwise the substitution won’t work.

Using too many backslashes makes the sed command look awkward. In this case we can change the delimiter to another character as shown in the below example.

$ sed 's|http://|www|' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
www
https://www
$ sed 's_http://_www_' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
www
https://www

Using & as the matched string

There might be cases where you want to search for the pattern and replace that pattern by adding some extra characters to it. In such cases & comes in handy. The & represents the matched string.

$ sed 's/unix/{&}/' file.txt
learn about sed in {unix} or linux
{unix} commands
stream editor for linux or {unix}. unix is free os
{unix}
linux
learn os
open source

https://
www
http://
https://www
$ sed 's/unix/{&&}/' file.txt
learn about sed in {unixunix} or linux
{unixunix} commands
stream editor for linux or {unixunix}. unix is free os
{unixunix}
linux
learn os
open source

https://
www
http://
https://www

Using \1,\2 and so on to \9

The first pair of parenthesis specified in the pattern represents the \1, the second represents the \2 and so on. The \1,\2 can be used in the replacement string to make changes to the source string. As an example, if you want to replace the word “unix” in a line with twice as the word like “unixunix” use the sed command as below.

$ sed 's/\(unix\)/\1\1/' file.txt
learn about sed in unixunix or linux
unixunix commands
stream editor for linux or unixunix. unix is free os
unixunix
linux
learn os
open source

https://
www
http://
https://www

The parenthesis needs to be escaped with the backslash character. Another example is if you want to switch the words “unixlinux” as “linuxunix”, the sed command is

$ sed 's/\(unix\)\(linux\)/\2\1/' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
http://
https://www

Another example is switching the first three characters in a line

$ sed 's/^\(.\)\(.\)\(.\)/\3\2\1/' file.txt
aelrn about sed in unix or linux
inux commands
rtseam editor for linux or unix. unix is free os
inux
nilux
aelrn os
epon source

tthps://
www
tthp://
tthps://www

Duplicating the replaced line with /p flag

The /p print flag prints the replaced line twice on the terminal. If a line does not have the search pattern and is not replaced, then the /p prints that line only once.

$ sed 's/unix/linux/p' file.txt
learn about sed in linux or linux
learn about sed in linux or linux
linux commands
linux commands
stream editor for linux or linux. unix is free os
stream editor for linux or linux. unix is free os
linux
linux
linux
learn os
open source

https://
www
http://
https://www

Printing only the replaced lines

Use the -n option along with the /p print flag to display only the replaced lines. Here the -n option suppresses the duplicate rows generated by the /p flag and prints the replaced lines only one time.

$ sed -n 's/unix/linux/p' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free os
linux

Note : If you use -n alone without /p, then the sed does not print anything.

Running multiple sed commands.

You can run multiple sed commands by piping the output of one sed command as input to another sed command.

$ sed 's/unix/linux/' file.txt| sed 's/os/system/'
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free system
linux
linux
learn system
open source

https://
www
http://
https://www

Sed provides -e option to run multiple sed commands in a single sed command. The above output can be achieved in a single sed command as shown below.

$ sed -e 's/unix/linux/' -e 's/os/system/' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free system
linux
linux
learn system
open source

https://
www
http://
https://www

Replacing string on a specific line number.

You can restrict the sed command to replace the string on a specific line number. An example is

$ sed '4 s/unix/linux/' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
linux
linux
learn os
open source

https://
www
http://
https://www

Replacing string on a range of lines.

You can specify a range of line numbers to the sed command for replacing a string.

$ sed '1,3 s/unix/linux/' file.txt
learn about sed in linux or linux
linux commands
stream editor for linux or linux. unix is free os
unix
linux
learn os
open source

https://
www
http://
https://www

Here the sed command replaces the lines with range from 1 to 3. Another example is

$ sed '2,$ s/unix/linux/' file.txt
learn about sed in unix or linux
linux commands
stream editor for linux or linux. unix is free os
linux
linux
learn os
open source

https://
www
http://
https://www

Here $ indicates the last line in the file. So the sed command replaces the text from second line to last line in the file.

Replace on a lines which matches a pattern.

You can specify a pattern to the sed command to match in a line. If the pattern match occurs, then only the sed command looks for the string to be replaced and if it finds, then the sed command replaces the string.

$ sed '/linux/ s/unix/centos/' file.txt
learn about sed in centos or linux
unix commands
stream editor for linux or centos. unix is free os
unix
linux
learn os
open source

https://
www
http://
https://www

Deleting lines.

You can delete the lines a file by specifying the line number or a range or numbers.

$ sed '2 d' file.txt
learn about sed in unix or linux
stream editor for linux or unix. unix is free os
unix
linux
learn os
open source

https://
www
http://
https://www
$ sed '5,$ d' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix

Duplicating lines

You can make the sed command to print each line of a file two times.

$ sed 'p' file.txt
learn about sed in unix or linux
learn about sed in unix or linux
unix commands
unix commands
stream editor for linux or unix. unix is free os
stream editor for linux or unix. unix is free os
unix
unix
linux
linux
learn os
learn os
open source
open source


https://
https://
www
www
http://
http://
https://www
https://www

Sed as grep command

You can make sed command to work as similar to grep command.

$ sed -n '/unix/ p' file.txt
learn about sed in unix or linux
unix commands
stream editor for linux or unix. unix is free os
unix

Here the sed command looks for the pattern “unix” in each line of a file and prints those lines that has the pattern.

You can also make the sed command to work as grep -v, just by using the reversing the sed with NOT (!).

$ grep -v 'unix' file.txt
$ sed -n '/unix/ !p' file.txt linux learn os open source https:// www http:// https://www

The ! here inverts the pattern match

Add a line after a match.

sed '/unix/ a "Add a new line"' file.txt

Add a line before a match

sed '/unix/ i "Add a new line"' file.txt

Add a line after a match.

sed '/unix/ a "Add a new line"' file.txt

Change a line

sed '/unix/ c "Change line"' file.txt

Transform like tr command

sed 'y/ul/UL/' file.txt

Posts on sed

SED

Linux - sed command

Related Post:

Why Python for Production Services

Vector Deployment Patterns

Vector Aggregator — Transform and Route

Vector Agent — Lightweight Log Collection

HashiCorp Vault — Centralized Secret Management

Vault Auth Methods — Token vs AppRole

Unit Tests for Business Logic

Test Coverage and CI Integration

Docker Swarm Deployment

Why Structured Logging Matters

structlog — JSON Logging with Context

Secret Workflow — Local to Production

Scheduled Security Scans

Production Operations Runbook

pytest — Fixtures, Conftest, and Async Testing

Pydantic — Request & Response Validation

Prometheus Metrics — RED Method

Project Structure with pyproject.toml

Pre-Commit Hooks for Security

Auto-Instrumentation for FastAPI

OpenTelemetry — Traces, Spans, and Context

Marathon/Mesos Deployment

Log Rotation and Disk Management

End-to-End Pipeline

Kubernetes Deployment

Kafka — Durable Log Transport

Jaeger — Visualizing Distributed Traces

Integration Tests for API Endpoints

Health Checks and Readiness Probes

Graceful Shutdown

GitHub Actions CI Pipeline

FastAPI — Async-First HTTP Framework

Error Handling & Response Models

Elasticsearch + Kibana — Search and Visualize

Dual Output — Stdout and File Logging

Docker — Containerize from Day One

Docker Compose Deployment

Dependency Updates and Maintenance

Dependency Auditing with pip-audit

Request-Scoped Logging with Correlation IDs

Container Security with Trivy

Environment-Based Config with pydantic-settings

Async Database Operations

API Versioning Strategies

RESTful Route Design with FastAPI Router

K8s Contributor Playground, Learning by Contributing

Git - Switch Remote URL

Git - Reset Commits

Git - Cheat Sheet

Git - Push with SSH

Git - Merge

Git - Init

Git - Project Lead/Manager

Git - Commit Files

Git - Create Branch

Git - Common Commands

Git - Branch Management

Adding Try in PWD button to README file

Docker Issues

Git - Basics for a Developer

Jenkins - Upgrade Jenkins

Jenkins - Schedule

AWS EBS Volmes - Create and attach the EBS volume with mounting

Elasticsearch - Dumping documents from multi-node to single node

CICD Jenkins - Send email with default content

Git - Intro

Arachni - VAPT Tool

VAPT - Vulnerability Assessment and Penetration Testing