sed stands for stream editor in Linux, a powerful command-line tool in Linux for parsing and transforming text. Think of it as a friendly text editor that reads through your words and efficiently processes textual data and configuration files.
With simple commands, you tell sed what to find in your text and what to replace it with. It’s a quick and easy way to replace multiple patterns without hassle.
Check out our quick tutorial on using sed to find and replace a string in a file – perfect for those short on time!
In this detailed version, we’ll discuss the basic sed syntax and then go into several use cases where you can use it to find and replace text based on several parameters.
Table Of Contents
- Understanding Linux sed Syntax
- Linux sed Options
- Practical Examples to Explore sed Commands
- Example #1: Replace a String
- Example #2: Replace All Occurrences of a String
- Example #3: Replace a Specific Occurrence in a Line Using the sed Command
- Example #4: Only Print Lines With Substitute Text
- Example #5: Replace String Using the sed Command and Ignore Case
- Example #6: Replace String in Specific Line Using the sed Command
- Example #7: Replace String Only in a Specific Range of Lines
- Example #8: Delete a Specific Line
- Example #9: Delete Lines Within a Specific Range
- Example #10: Delete From Specific to the Final Line
- sed Expressions and Patterns
- Conclusion
- FAQs
Understanding Linux sed Syntax
The Linux sed command follows a specific syntax pattern, which includes various options, a script (if needed), and an input file (optional):
# sed [options] [script] [input_file...]
Let’s break down the syntax to understand it better:
Options: The purpose of options is to fine-tune sed behavior. For instance, -n suppresses automatic printing.
Script: You can pass a script containing multiple instructions as a parameter
Input_File: The input file you wish to process with sed.
Linux sed Options
Command line flags are critical to fine-tuning and optimizing how sed access, processes, and outputs the processed text. Here’s an overview of sed command-line options.
Short Option | Long Option | Description |
-b | – -binary | Opens input files in binary mode, treating lines as ending at a line feed. |
– -debug | Activates debug mode for canonical input printing and program execution annotation. | |
– -follow-symlinks | Enables editing the final destination of symbolic links when used with -i. | |
– -help | Displays usage information to assist users in understanding sed’s functionality. | |
– -i | – -in-place [=SUFFIX] | Enables in-place edits by overwriting the original file; optional SUFFIX for backups. |
– -posix | Turns off all extensions to POSIX sed, simplifying the writing of portable scripts. | |
– -version | Displays the version of the sed utility currently running on your system. | |
-E, -r | – -regexp-extended | Allows extended regular expressions, enhancing pattern-matching capabilities. |
-e script | – -expression=script | Adds a specific script to run alongside the sed commands, offering flexibility in text manipulation. |
– -f | -file=script-file | Incorporates a script file’s contents to run with the sed commands. |
-l N | – -line-length=N | Defines the desired line-wrap length for the ‘l‘ command, defaulting to 70. |
-n | – -quiet, – -silent | Disables output printing, allowing for silent text processing. |
-s | – -separate | Views specified files as separate entities when dealing with multiple files. |
– -sandbox | Turns off the execution of external programs, focusing solely on manipulating input files. | |
-u | – -unbuffered | Minimizes input and output buffering for efficient processing. |
-z | – -null-data,
– -zero-terminated |
Interprets input as a series of null-terminated lines, enabling unique text processing. |
Understanding and utilizing these options allows you to fully leverage the sed command for various text editing tasks in Linux.
Practical Examples to Explore sed Commands
Now that you have a good idea about the basic sed syntax, we’ll explore ten essential sed commands and demonstrate them with easy-to-follow examples.
For this demonstration, we’ll use a sample file called aliceinwonderland.txt with the following text:
Alice in wonderland.
Rabbit in a top hat.
Alice chasing the rabbit in wonderland.
Tea party with the Mad Hatter.
The Queen of Hearts in her palace.
Remember that, by default, sed won’t change the original file unless you use the -i option. It displays the modifications and processed text in the standard output. We strongly recommend checking this output before you use the -i flag to make changes to the original text.
Now, let’s explore these essential sed commands:
Example #1: Replace a String
The sed command for replacing strings changes specific text patterns in a file. It allows you to efficiently update text within a file, making it handy for quick edits or substitutions.
Let’s see its syntax:
# sed 's/old_string/new_string/' aliceinwonderland.txt
Here:
- s: signifies the substitution operation.
- old_string: The text you want to replace.
- new_string: The replacement text.
- filename: The file containing the text to modify. In this case, it is aliceinwonderland.txt.
Let’s see an example of the syntax below:
# sed 's/Rabbit/Cheshire Cat/' aliceinwonderland.txt
This command replaces the first occurrence of Rabbit with Cheshire Cat in the file.
Example #2: Replace All Occurrences of a String
The sed can globally substitute a specific text pattern throughout a file. It efficiently updates multiple instances of a text pattern within the file.
The command to replace every occurrence of a specified string in a text is:
# sed 's/old_string/new_string/g' aliceinwonderland.txt
Here, the g in syntax stands for global, indicating that the utility will replace all occurrences in each line.
Here’s an example:
# sed 's/Alice/Alice in Wonderland/g' aliceinwonderland.txt
This command replaces all occurrences of Alice with Alice in Wonderland in the file.
Example #3: Replace a Specific Occurrence in a Line Using the sed Command
sed substitutes the targeted text pattern within a line of a file to replace a specific occurrence in a line. It allows for precise replacements within specific lines, providing control over the editing process. The syntax is as follows:
# sed 's/old_string/new_string/#' aliceinwonderland.txt
Here, the # indicates the specific occurrence you want to target within each line.
For instance, if you want to replace the second occurrence of in with inside in each line, use this command:
# sed 's/in/inside/2' aliceinwonderland.txt
The output of this command shows the replacement of only the second occurrence of the word in within each line, as shown below:
Example #4: Only Print Lines With Substitute Text
You can use the following sed command to print only the lines with substitute text. It helps filter lines in large files and highlights the lines containing replacement texts. The syntax of the command is:
# sed -n 's/old_string/new_string/p' aliceinwonderland.txt
To disable automatic printing, use the -n option and p to print substituted lines.
For instance, to replace wonderland with enchanted land and display only the lines with the substitution, use this command:
# sed -n 's/wonderland/enchanted land/p' aliceinwonderland.txt
Output:
Example #5: Replace String Using the sed Command and Ignore Case
The sed command for replacing a string with case insensitivity is used to substitute a specific text pattern throughout a file, ignoring the letter case. It enables text replacement regardless of the uppercase or lowercase variations, providing flexibility in text edits.
The syntax of the command is:
# sed 's/old_string/new_string/i' aliceinwonderland.txt
Where the I enables case insensitivity.
So, to replace both uppercase and lowercase instances of rabbit with Cheshire Cat in the text, use this command:
# sed 's/rabbit/Cheshire Cat/i' aliceinwonderland.txt
The output of the command is:
In this output, you can see that rabbit has been changed in all instances, ignoring the letter case, thanks to the sed’s case-insensitive mode.
Example #6: Replace String in Specific Line Using the sed Command
The sed command for changing a string in a specific line lets you swap out a particular text in just one line. It allows for precise replacements within a line, providing better control over the editing process. The typical syntax is:
# sed 'Ls/old_string/new_string/' filename
Here, L specifies the line number where substitution should occur.
For instance:
# sed '3 s/Alice/Dorothy/' aliceinwonderland.txt
The output shows that the first appearance of Alice in the second line stays the same, but in the third line, it has been replaced by Dorothy instead.
Example #7: Replace String Only in a Specific Range of Lines
If you wish to replace multiple string occurrences within a defined line range without affecting the entire text, you can use the following sed command:
# sed '#,# s/old_string/new_string/' aliceinwonderland.txt
In this syntax, replace the first # with the starting line number and the second # with the final line number you want in the range.
For instance, to replace the last two instances of Alice with Dorothy in lines 3 to 5, use the following command:
# sed '3,5 s/Alice/Dorothy/' aliceinwonderland.txt
This output clearly shows that Alice, within the specified line range, has changed to Dorothy, maintaining the rest of the text in the file.
Example #8: Delete a Specific Line
The sed command for deleting a specific line removes unwanted text by targeting a line in a file. Its syntax is:
# sed '#d' aliceinwonderland.txt
In this syntax, replace the # with the line number you wish to remove from the file.
For instance, to remove the 3rd line from the file, use the following command:
# sed '3d' aliceinwonderland.txt
Output:
As you can see in the following output, the third line (Dorothy chasing the rabbit in wonderland) has been deleted.
Example #9: Delete Lines Within a Specific Range
Use the following sed command to delete lines within a specified line range:
# sed '#,#d' aliceinwonderland.txt
Replace ‘the first # with the beginning line number and the next # with the last number in the range.
For instance, if you want to delete lines 2 to 4 from the file, use the following command:
# sed '2,4d' aliceinwonderland.txt
The output will confirm the successful removal of the specified lines, preserving the remaining text.
Example #10: Delete From Specific to the Final Line
To delete lines starting from a specific line number to the last line of a file, use the following delete command:
# sed '#,$d' aliceinwonderland.txt
Replace the # symbol with the line number from which you want to start deleting, and execute the command.
For instance, to delete everything from the third line to the end of the file, use this command:
# sed '3,$d' aliceinwonderland.txt
The output shows that the file now contains two lines of text:
sed Expressions and Patterns
Expressions and patterns are the rules and criteria sed uses to find and manipulate text in files. When using sed, expressions define what text to find, and patterns describe the structure/format of that text.
Let’s look at these ideas in some detail:
Default Actions and Output Stream
By default, sed reads a line, performs specified actions or expressions, and then sends the results to the standard output stream.
A typical syntax is:
# sed 's/old_string/new_string/' input.txt > output.txt
This command takes input from input.txt, swaps old_string with new_string, and displays the modified text in output.txt.
Handling Blank Lines and Line Output
Ever wonder how to deal with spaces in your text that seem to do nothing?
sed is an excellent tool for managing blank lines and their impact. You can use the -N option to work with empty lines or lines with specific patterns.
Handling Special Characters and Clear Text Forms
sed simplifies dealing with tricky character patterns by keeping them organized. We suggest using the -F flag to ensure these characters behave as intended. This simplifies text edits and makes the entire process straightforward and hassle-free.
The basic syntax of a sed command looks like this:
# sed 's/old_string/new_string/' input.txt
However, if the old_string contains special characters, using the basic form might lead to unexpected behavior. You can use the -F flag to work with special characters in target strings:
# sed -F 's/old_string/new_string/' input.txt
This flag instructs sed to treat old_string as a plain text string, allowing you to manipulate it as you wish.
Working with a Single Address
sed makes it simple to choose precisely which lines the command will act upon. In this context, an address can be a line number or a pattern. For instance, to alter only line 5, you can use:
# sed '5s/old_string/new_string/' input.txt
This command exclusively switches old_string to new_string on the 5th line of input.txt.
Command Options and Temporary Files
You can customize specific sed actions with command options. For instance, when editing files in place, you can use the -i option to create a file’s backup copy.
# sed -i.bak 's/old_string/new_string/' input.txt
In this example, the original file is edited in place, and a backup copy with a .bak extension is created.
Conclusion
sed is a popular command-line text editor for streamlining and automating text transformations. With its versatile text manipulation capabilities, it can save countless hours of manual editing.
If you’re looking for a robust server for your projects, RedSwitches offers the best dedicated server pricing and delivers instant dedicated servers, usually on the same day the order gets approved. Whether you need a dedicated server, a traffic-friendly 10Gbps dedicated server, or a powerful bare metal server, we are your trusted hosting partner.
FAQs
Q. What is the sed stream editor?
The sed stream editor is a powerful tool in Linux for performing fundamental text transformations. It operates line-by-line and can modify, delete, or insert text in a text stream.
Q. How is sed different from a regular text editor?
Unlike regular text editors, sed is a command-line tool that allows you to process large amounts of text in an automated way. It doesn’t provide an interactive interface like text editors like vi or nano. Still, it takes input from an input stream and applies various basic commands to manipulate the text.
Q. What is the syntax for using the sed stream editor?
The basic syntax for sed is:
# sed [options] [script] [input_file...]
Q. What does the ‘g’ in the sed command stand for?
The ‘g‘ stands for “global”. It replaces all occurrences of a pattern match in a line.
Q. Can I use sed to edit files directly?
Yes, by using the -i option, you can edit files in place without redirection.
Q. Is sed exclusive to Linux?
No, sed is available on most Unix-like systems, including macOS.
Q. How do I modify text using sed?
To modify text using sed, you can use the substitution command. The syntax for the substitution command is:
s/find/replace/
For instance, to replace all occurrences of “old_string” with “new_string” in a text stream, you can use the following command:
# sed 's/old_string/new_string/' input.txt
Q. Can sed perform multiple operations on a text stream?
Yes, sed offers a variety of commands that can be combined to perform multiple operations on a text stream. By using the “-e” option followed by multiple sed commands, you can execute them one after the other. For instance:
# sed -e 's/old_string/new_string/' -e 's/old_string/new_string/' input.txt
Q. How can I apply sed commands to a specific range of lines?
To apply sed commands to a specific range of lines, you can use the address range feature of sed. The syntax for specifying an address range is:
sed '#,# s/old_string/new_string/' input.txt
Q. Can I write a sed script in a file and execute it?
Yes, you can write a sed script in a file and execute it using the “-f” option followed by the file name. This allows you to reuse the sed script for different input files. For instance:
sed -f script.sed input.txt۔