In this tutorial, we will explore how to use sed
(stream editor) with examples in the Markdown language. sed
is a powerful command-line tool for text manipulation and is widely used for tasks such as search and replace, line filtering, and text transformations. What is described below barely scratches the surface what sed
can do.
Table of Contents
- Installing Sed
- Basic Usage
- Search and Replace
- Deleting Lines
- Inserting and Appending Text
- Transformations
- Working with Files
- Conclusion
1. Installing Sed
Before we begin, make sure sed
is installed on your system. It usually comes pre-installed on Unix-like systems (e.g., Linux, macOS). To check if sed
is installed, open your terminal and run the following command:
sed --version
If sed
is not installed, you can install it using your package manager. For example, on Ubuntu or Debian-based systems, you can use the following command:
sudo apt-get install sed
2. Basic Usage
To use sed
, you need to provide it with a command and the input text to process. The basic syntax is as follows:
sed 'command' input.txt
Here, 'command'
represents the action you want to perform on the input text. It can be a search pattern, a substitution, or a transformation. input.txt
is the file containing the text to process. If you omit the file name, sed
will read from the standard input.
3. Search and Replace
One of the most common tasks with sed
is search and replace. To substitute a pattern with another in Markdown files, use the s
command. The basic syntax is:
sed 's/pattern/replacement/' input.md
For example, to replace all occurrences of the word “apple” with “orange” in input.md
, use the following command:
sed 's/apple/orange/' input.md
4. Deleting Lines
You can also delete specific lines from a Markdown file using sed
. The d
command is used to delete lines that match a particular pattern. The syntax is as follows:
sed '/pattern/d' input.md
For example, to delete all lines containing the word “banana” from input.md
, use the following command:
sed '/banana/d' input.md
5. Inserting and Appending Text
sed
allows you to insert or append text at specific locations in a Markdown file. The i
command is used to insert text before a line, and the a
command is used to append text after a line. The syntax is as follows:
sed '/pattern/i\inserted text' input.md
sed '/pattern/a\appended text' input.md
For example, to insert the line “This is a new paragraph.” before the line containing the word “example” in input.md
, use the following command:
sed '/example/i\This is a new paragraph.' input.md
6. Transformations
sed
provides various transformation commands that can be used to modify Markdown files. Some useful commands include:
-
y
: Transliterate characters. For example, to convert all uppercase letters to lowercase, use:sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' input.md
-
p
: Print lines. By default,sed
only prints the modified lines. To print all lines, use:sed -n 'p' input.md
-
r
: Read and insert the contents of a file. For example, to insert the contents ofinsert.md
after the line containing the word “insertion point” ininput.md
, use:sed '/insertion point/r insert.md' input.md
These are just a few examples of the transformation commands available in sed
.
7. Working with Files
By default, sed
modifies the input in-place. To make changes to a file and save the output to a new file, you can use input/output redirection:
sed 'command' input.md > output.md
This command runs sed
on input.md
and saves the output to output.md
. Be cautious when using redirection, as it will overwrite the contents of output.md
if it already exists.
8. Conclusion
In this tutorial, we have explored the basics of using sed
with Markdown files. You have learned how to perform search and replace operations, delete lines, insert and append text, apply transformations, and work with files. sed
offers a wide range of capabilities, and with practice, you can become proficient in manipulating Markdown files using this powerful tool.
You can combine sed with find to recursively go through changing everything in a folder:
find . -type f -exec sed -i 's/a/b/g' {} +
Will change all instances of a to b in all files recursively from the current directory.
Relevant xkcd:
Thank you. I think this will really drive up traffic from newer people getting into linux/system admin.
Would love a similar guide on awk since I have personally never used it before (I know, I know, just how did I manage that).
Thanks!