50 Best SED Commands in Linux/Unix with Examples

Posted in

50 Best SED Commands in Linux/Unix with Examples
vinaykhatri

Vinay Khatri
Last updated on April 16, 2024

    SED stands for Stream Editor and it is a feature in GNU/Linux that helps to perform various functions on a file, like insertion, deletion, searching, and find and replace, with the help of certain commands. Also, SED commands are extensively used for performing substitution or find and replace in UNIX.

    The original file content is not changed by default since SED commands perform all modifications on it temporarily. Moreover, we can store the modified content of the original file in another file, if needed. Manual text processing takes lots of effort, so SED commands make it easier.

    Syntax

    The basic syntax of the SED command is as follows:

    sed [options]... [script] [file]

    In this tutorial, we will make you familiar with various SED commands and also give examples to help you understand how to use them with ease. So, let us get started.

    Prerequisites to Run SED Commands

    To run the SED commands on your system, you first need to ensure that SED is installed in your machine. You can check the version of the SED installed on your system by using the following command:

    $ sed --version

    Best SED Commands

    1. Basic Substitution

    This SED command helps search and replace a particular part of the text with another text. The code snippet shown below searches the word “Day” and replaces it with the word “Coding”.

    Code

    $ echo "Happy Day" | sed 's/Day/Coding/'

    Output

    The same snippet can also be used to edit a complete file.

    Code

    $ sed 's/Swift/Swift is used in ios/' file.txt

    Output

    Here “Swift” is found in “file.txt” and is changed to “Swift is used in iOS”.

    2. Replace all the instances of the match in a particular line of the file

    ‘g’ option in the SED command makes it possible to replace all the instances of the matching pattern. In the example below, a file named file.txt is created that contains some text. The third line contains the word “Python”, which gets replaced with the word “R”.

    Code

    $ cat file.txt
    $ sed '3 s/Python/R/g' file.txt

    Output

    The “cat” function displays the file contents, as shown below. The second code line, which is a SED command, will replace all instances of “Python” with “R”.

    3. Replace the second instance of the match in each line

    If a string appears in a line of text file multiple times, then a particular occurrence can be replaced using the SED command. In the example below, we have a named file.txt with some text. Here, we will use the SED command to replace the second instance of “Python” with “Perl”.

    Code

    $ cat file.txt
    $ sed 's/Python/Perl/g2' file.txt

    Output

    The “cat” command displays the file contents as shown below. After that, the SED command will replace the second instance of “Python” with “Perl” in each line. The line having only one instance of the word “Python” will remain unaffected.

    4. Replace the last instance of the match in each line

    If a string appears in a line of text file multiple times, then we can replace the last occurrence using the SED command. In the following example, there is a file named file.txt having some text. Here, we will use the SED command to replace the last instance of "easy" with "hard" in each line.

    Code

    $ cat file.txt
    $ sed 's/\(.*\)easy/\1hard/' file.txt

    Output The “cat” command displays the file contents as shown below. After that, we will replace the last instance of "easy" with "hard" in each line using a SED command.

    5. Replace the first match in a file

    We need to replace the first match of the text "hard" with the text "easy". Here, we will use ‘1’ in the SED command to match the first instance of the pattern.

    Code

    $ cat file.txt
    $ sed '1 s/easy/hard/' file.txt

    Output

    The “cat” function displays the file contents, and then we will replace the first instance of "easy" with "hard" using a SED command.

    6. Replace the last match in a file

    We need to replace the text "easy" with the text "hard". Here, we will use the ‘$’ in the SED command to match the last instance of the pattern.

    Code

    $ cat file.txt
    $ sed '$s/easy/hard/' file.txt

    Output

    The “cat” function displays the file contents in the first code, as shown below. The SED command will then replace the last instance of "easy" with "hard".

    7. Escaping backslash in replace commands to manage to search and replace of file paths

    Here is a SED command to add a backslash in the file path. For searching and replacing, it is necessary to escape a backslash in the file path.

    Code

    $ echo "Desktop/8085Microprocessor/assignment3" | sed 's;/;\\/;g'

    Output

    The file path, "Desktop/8085Microprocessor/assignment3" is provided as input in the SED command, and the following output will appear after running the above command.

    8. Replace all files full path with its filename

    Using the following SED command, we will retrieve the filename from the full path of the file:

    Code

    $ echo "Desktop/8085Microprocessor/assignment3" | sed 's/.*\///'

    Output

    The SED command will extract "assignment3" from the full path "Desktop/8085Microprocessor/assignment3".

    9. Substitute text but only if the match is found in the string

    Here is a file named “file.txt” that contains some content. We will use three SED commands to replace text. The text, “marks” will be replaced by 93 in the line that has the text, “A_score”, the text “marks” will be replaced by 97 in the line that has the text, “C_score” and the text “marks” will be replaced by 95 in the line that has the text, “D_score”.

    Code

    $ cat file.txt
    $ sed -e '/A_score/ s/marks/93/; /C_score/ s/marks/97/; /D_score/ s/marks/95/;' file.txt

    Output

    10. Substitute text but only if the match is found in the string

    Here is a SED command that will replace the “marks” value in the line that does not contain the text, “B_score”.The “file.txt” contains three lines that do not include the text “B_score”. So, the “marks” text will be replaced by “All scored same” in three lines.

    Code

    $ cat file.txt
    $ sed -i -e '/B_score/! s/marks/All scored same/;' file.txt
    
    $ cat file.txt

    Output

    The “cat” function displays the content of the file. The second line of the code will substitute the text.

    11. Add string before the matching pattern using ‘\1’

    The sequence of matching patterns of the SED command is denoted by ‘\1’, ‘\2’, and so on. The below command will search the pattern “World” and insert the pattern “Digital” exactly before the matched pattern.

    Code

     $ echo "Hello World" | sed 's/\(World\)/Digital \1 /'

    Output

    The output is shown below after executing the command:

    12. Delete matching line

    We can use the ‘d’ option in the SED command to delete a line from the file. The following command will delete the line having the word “Pascal” from the file named “file.txt”:

    Code

     $ sed '/Pascal/d' file.txt

    Output

    The “cat” command displays the content of the file. The SED command will delete the line that contains the word “Pascal”.

    13. Delete the matching line and two lines after the match

    The following SED command will delete the complete line containing the word “Pascal” from the file named “file.txt” and two lines following it will also be deleted:

    Code

     $ sed '/Pascal/,+2d' file.txt

    Output

    The “cat” function displays the content of the file. The SED command will delete three lines starting from the bar where the “Pascal” word is found.

    14. Delete all spaces at the end of the line of text

    The following SED command will delete all extra spaces at the end of the line:

    Code

    $ cat file.txt
    $ sed 's/ *$//' file.txt

    Output

    The “cat” function displays the content of the file. The SED command will delete all the extra spaces at the end of the line.

    15. Delete all lines that have a match two times within a line

    The following SED command will delete those lines having two instances of the same word:

    Code

    $ cat file.txt
    $ sed 's/C++/dl/i2;t' file.txt | sed '/dl/d'

    As seen in the output, the first and second lines have two instances of the word “C++” so both will be deleted from the text file.

    Output

    The “cat” function displays the content of the file. The SED command will delete the line having two instances of the match.

    16. Delete all empty lines

    In the following command, we will be deleting empty lines:

    Code

    $ cat file.txt
    $ sed '/^$/d' file.txt

    The text in the file name file.txt has many empty lines. After executing the SED command mentioned above, all empty lines will be deleted.

    Output

    The “cat” function displays the content of the file. The SED command will delete all the empty lines from the file.

    17. Delete all non-printable characters

    Some characters like ‘\t’ can’t pass directly into the “echo” function to overcome this type of problem; we first declare a variable and assign a non-printable character to the variable. An assigned variable is then passed in the “echo” command as a non-printable character, and the output of “echo” is sent to the SED command.

    In the example below, the ‘\t’ character is assigned to a variable, and the $tab is used in the “echo” command. The output of the `echo` command is sent in the `sed` command that will remove the character, ‘\t’ from the output.

    Code

    $ tab=$'\t'
    $ echo Hello"$tab"Coding
    $ echo "Hello"$tab"Coding | LANG=c sed 's/[^[:print:]]//g'

    Output

    In the first line of the code, ‘\t’ is assigned to the tab variable. The second line of the code is to check the assigned variable. In the third line, the output of the echo command is served to the SED command that deletes a non-printable character.

    18. If there is a match in a line, append something to the end of the line

    Add something to the end of the line if there is a pattern match in line. The following SED command will add the text “and problem solving” at the end of the third line having the word “competitive”:

    Code

    $ cat file.txt
    $ sed '/competitive/ s/$/ and problem solving/' os.txt

    Output

    The “cat” function displays the content of the file. The second line of code will add the text to the end of the line that contains the defined pattern.

    19. If there is a match in the line, insert a line before that line

    The following SED command will insert a text just before the line that contains the specified text:

    Code

    $ cat file.txt
    $ sed '/C++ is easy to write/ s/^/C++ is used in problem solving.\n/' file.txt

    In the output below, the SED command will first search for the text pattern “C++ is easy to write” and insert the text “C++ is used in problem solving” just before it.

    Output

    The “cat” function displays the content of the file. The second line of code will insert text before matched text pattern

    20. If there is a match in the line, insert a text after that line

    Here is a SED command to insert a text just after the line where the pattern is matched. In the output below, the pattern “coding” is searched in the file, and “C++ can be used in problem solving” is inserted just after it.

    Code

    $ cat file.txt
    $ sed 's/coding/&\nC++ can be used in problem solving/' file.txt

    Output

    The “cat” function displays the content of the file. The second line of code will insert text after the line containing the matched text pattern.

    21. If there is not a match, append something to the end of the line

    Here is a SED command that will search those lines in “file.txt” that do not contain the text “is” and append the text “ and problem solving” at the end of each line. Here, the ‘ $ ‘ symbol identifies the line where the new text will be appended.

    Code

    $ cat file.txt
    $ sed '/is/! S/$/ and problem solving/' file.txt

    Output

    The “cat” function displays the content of the file. The second line of code will insert text after the line that contains the specified text pattern.

    22. If there is not a match, delete the line

    From the file “file.txt”, we will delete all the lines that do not contain a specific pattern. In the example below, the pattern “is” is not found in the third line; therefore, it is deleted.

    Code

    $ cat file.txt
    $ sed '/is/!d/' file.txt

    Output

    The “cat” function displays the content of the file. The second line of code will delete all the lines that do not contain the text pattern ‘is’.

    23. Duplicate matched text after adding a space after the text

    Here is a SED command that will search the word “very” in the file “file.txt”, and if the word exists, the same word will be inserted after the search word by adding space. Here, the ‘&’ symbol is used to append the duplicate text.

    Code

    $ cat file.txt
    $ sed -e 's/very /& very /g' file.txt

    Output

    The “cat” function displays the content of the file. The second line of code will add the duplicate word after the matched pattern.

    24. Replace one list of strings with the new string

    To understand this command, we will consider two files, namely “file.txt” and “file2.txt”, with each file containing some content. The following SED command will match the first column of the two text files and replace the matching text with the value of the third column of the file file2.txt ”.

    Code

    $ cat file2.txt
    $ cat file.txt
    $ sed `cat file2.txt | awk '{print "-e s/"$1"/"$3"/"}'`<<<"` cat file.txt`"

    Output

    The “cat” function displays the content of the file. The numbers 1001, 1002, 1003 from the first column of files “file.txt” and “file2.txt” are matched, so these are replaced by corresponding names of the third column of “file2.txt”.

    25. Replace the matched string with another string

    Here is a SED command that will search for the pattern “Python” in the output provided by the “echo” command. The matched pattern is replaced with “Python3”.

    Code

    $ echo "C++ C C# Python Swift Scala Pascal" | sed 's/Python/Python3/'

    Output

    “Python” is replaced with “Python3” after running the echo and SED commands.

    26. Remove newlines from the file and insert ‘ | ’ at the end of each line

    Here is a SED that command will replace each newline with ‘ | ’ in the “file.txt”. Here the “-z” option will separate the line by the NULL character.

    Code

    $ cat file.txt
    $ sed -z 's/\n/ | /g' file.txt

    Output

    The “cat” function displays the content of the file. The second line of the code will replace each newline with ‘ | ’.

    27. Remove ‘,’ and add a newline to split the text into multiple lines

    The following command will read ‘,’ character and replace it with the new line in the ‘file.txt’ file:

    Code

    $ cat file.txt
    $ sed "s/, /\n/g" file.txt

    Output

    The “cat” function displays the content of the file. The second line of the code will replace each ‘,’ character with the newline. Here ‘\n’ denotes a new line.

    28. Find a case-insensitive match and delete line

    We can use ‘I’ in the SED command for the case-insensitive match that indicates ignore case. The following SED command will search the line that contains the word ‘used’ and delete the line from the “file.txt” file.

    Code

    $ cat file.txt
    $ sed '/used/Id' file.txt

    Output

    The “cat” function displays the content of the file. After executing the second command, it will search for the line in the “file.txt” that matches with the pattern, i.e., “used”, for case-insensitive search will be deleted.

    29. Find a case-insensitive match and replace it with new text

    The following SED command will replace every case-insensitive match of “c++” with the word “Python” from the file “file.txt”:

    Code

    $ cat file.txt
    $ sed 's/c++/Python/i' file.txt

    Output

    The “cat” function displays the content of the file. The output for the SED command is shown below:

    30. Find a case-insensitive match and replace all occurrences with its upper case of the exact text

    The following SED command will make the case-insensitive search for the word “competitive coding” and replace all its occurrences with “COMPETITIVE CODING” in the file named “file.txt”. Here ‘\U’ is used to convert any text to all uppercase letters.

    Code

    $ cat file.txt
    $ sed 's/\(competitive coding\)/\U\1/Ig' file.txt

    Output

    The “cat” function displays the content of the file. After executing the command, the word “competitive coding” is replaced with “COMPETITIVE CODING”.

    31. Find a case-insensitive match and replace all occurrences with its lower case of the exact new line

    The following SED command will make the case-insensitive search for the word “C++” and replace all its occurrences with “c++” from “file.txt”. Here ‘\L’ is used to convert any text to all uppercase letters.

    Code

    $ cat file.txt
    $ sed 's/\(c++\)/\L\1/Ig' file.txt

    Output

    The “cat” function displays the content of the file. After executing the SED command, every occurrence of the word “C++” is converted into “c++”.

    32. Replace all uppercase characters of the text with lowercase characters

    The following SED command will search all uppercase characters in the “file.txt” file and replace the characters with lowercase letters by using ‘\L’:

    Code

    $ cat file.txt
    $ sed  's/\(.*\)/\L\1/' file.txt

    Output

    The “cat” function displays the content of the file. After executing the command, every uppercase letter is converted to lowercase, as shown below.

    33. Search for a number in line and append any currency symbol before the number

    The following SED command will search for a number from “file.txt” and insert the ‘$’ symbol before each number:

    Code

    $ cat file.txt
    $ sed 's/\([0-9]\)/$\1/g' file.txt

    Output

    The “cat” function displays the content of the file. After executing the SED command, the ‘$’ symbol will be inserted before every number, as shown below.

    34. Add commas to numbers that have more than three digits

    Here we will describe a SED command that will take a number as input from the “file.txt” and add a comma after each group of three digits, counting from the right for every number in the file. Here, ‘:a’ indicates the label, and ‘ta’ is used to iterate the grouping process.

    Code

    $ cat file.txt
    $ sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' file.txt

    Output

    The “cat” function displays the content of the file. After executing the command, a comma will be put after each group of three digits counting from the right, as shown below.

    35. Replace tab character with four space characters

    Here is a SED command that will replace every tab character (\t) with four spaces. Here we take the output of the “echo” command as input for the SED command. To replace all tab characters, the ‘g’ option is used. ‘$’ symbol in the SED command is to match tab characters.

    Code

    $ echo -e "Hello\tWorld\t" | sed $'s/\t/ /g'

    Output

    Every tab character gets replaced by four spaces, as shown below.

    36. Replace four consecutive spaces with a single space character

    Here is a SED command that will replace every consecutive four spaces with a single space character.

    Code

    $ echo -e "Hello    World    !" | sed $'s/    */ /g'

    Output

    All four consecutive spaces will be replaced with a single space, as shown below.

    37. Truncate all lines to the first ten characters

    Here is a SED command that will delete all characters from every line except the first ten characters in each line.

    Code

    $ cat file.txt
    $ sed 's/\(^.\{1,10\}\).*/\1/' file.txt

    Output

    In the file “file.txt” every line is truncated to 10 characters, as shown below.

    38. Searching for a string and appending some standard text after it

    Here is the SED command that will search “Programmers” in the input text and append “ and Coders” after that text.

    Code

    $ echo "Happy coding to all Programmers" | sed 's/\(Programmers\)/\1 and Coders/'

    Output

    The output of the SED command mentioned is shown below:

    39. Search for string regex and append some text after the second match in each line

    Here, we will mention a SED command that will append the text “(Add New Text)” after the second match of string “C++” for every line in the file “file.txt”.

    Code

    $ cat file.txt
    $  sed 's/\(C++\)/\1 (Add New Text)/2' file.txt

    Output

    The following output will appear after executing the SED command mentioned above:

    In the second and third lines, there are two instances of the word “C++” after the second “C++” new text “(Add New Text)” will be appended.

    40. Running multi-line SED scripts from a file

    Multiple SED commands can be stored in a file and executed simultaneously using a single SED command. For example, we will create a file named “sedcmd” that contains commands to change all instances of “C++” to “Python” and all instances of “Easy” to “Hard” in the file “file.txt”.

    sedcmd

    s/C++/Python/
    s/Easy/Hard/

    Code

    $ cat sedcmd
    $ sed -f sedcmd  file.txt

    Output

    The “cat” function displays the content of the file. The second line of command will change all the instances of “C++” and “Easy” to “Python” and “Hard”, respectively, as shown below:

    41. Match a multi-line pattern and replace it with new multi-line text

    Here is a SED command that will search the multi-line text “Python\nC++”, and if the pattern matches, the matching text will be replaced by the multi-line text, “Python3\nC” from the file “file.txt”. Also, we will use P and D in the SED command for multi-line processing.

    Code

    $ cat file.txt
    $ sed '$!N;s/Python\nC++/Python3\nC/;P;D' os.txt

    Output

    The “cat” function displays the content of the file.

    Here, the first and second lines get changed to “Python3” & “C” from “Python” & “C++”.

    42. Replace order of two words in a text that match a pattern

    Here is a SED command that will search for two words in the file “file.txt”, and if the pattern matches, it will swap the words. In the given instance, “Hello” is swapped with “World”.

    Code

    $ cat file.txt
    
    $ sed -e 's/\([^ ]*\) *\([^ ]*\)/\2 \1/' file.txt

    Output

    The “cat” function displays the content of the file. After the execution of the SED command, “Hello” is swapped with “World”.

    43. Execute multiple SED commands from the command-line

    Here is a SED command that will execute two SED commands at once for the file “file.txt”. “Hello” is replaced with “Happy” and “World” is replaced with “Coding.”. The ‘-e’ option in the SED command makes it possible to run multiple SED scripts from the command line.

    Code

    $ cat file.txt
    
    $ sed -e 's/Hello/Happy/; s/World/Coding./' file.txt

    Output

    The “cat” function displays the content of the file. The following is the output of the SED command mentioned above.

    44. Combine SED with other commands

    Here is a SED command that will combine the SED command with the “cat” command. The first SED command will take input from the “file.txt” file and send the output of the command to the second SED command after replacing the text “Python” with “Python3”. The second SED command will replace the text “Javascript” with “JavaScript”.

    Code

    $ cat file.txt
    $ cat file.txt | sed 's/Python/Python3/'| sed 's/Javascript/JavaScript/i'

    Output

    The following output will appear after the execution of the SED command described above:

    45. Insert empty line in a file

    Here is a command to insert an empty line after every line in the file named “file.txt”. ‘G’ option is used to insert an empty line in a file.

    Code

    $ cat file.txt
    $ sed G file.txt

    Output

    After running the above-mentioned SED command, an empty line is inserted after each line of the file, as shown below:

    46. Replace all alpha-numeric characters by space in each line of a file

    Here is a SED command that replaces all alpha-numeric characters with space in each line of a file. The “file.txt” is provided as input for the SED command.

    Code

    $ cat file.txt
    $ sed 's/[A-Za-z0-9]//g' file.txt

    Output

    The following output will appear after running the aforementioned commands:

    47. Use ‘&’ to print matched string

    Here is a command to search the word starting with ‘L’ and replace the text by appending ‘Line starting from C is -’ with the matched word using the ‘&’ symbol. The flag ‘p’ is used to print the modified text.

    Code

    $ cat file.txt
    $ sed -n 's/^C/Line starting from C is - &/p' file.txt

    Output

    The following output will appear after running the above commands:

    48. Switch pair of words in a file

    Create a text file named “file.txt” such that it contains the pair of words in each line. The following command will switch the pair of words in each line of the file, “file.txt”:

    Code

    $ cat file.txt
    $ sed  's/\([^ ]*\) *\([^ ]*\)/\2 \1/' file.txt

    Output

    The following output will appear after switching the pair of words in each line, as “C++” is swapped with “Sublime” and so on.

    49. Capitalize the first character of each word

    Here is a SED command that capitalizes every first letter of the word in the file “file.txt”.

    Code

    $ cat file.text
    $ sed 's/\([a-z]\)\([a-zA-Z0-9]*\)/\u\1\2/g' file.txt

    Output

    The first letter of every word from the file “file.txt” is capitalized as shown below:

    50. Print line numbers of the file

    SED command uses the ‘=’ symbol to print the line number before each line of a file. The following command will print the content of the “file.txt” file with the line number:

    Code

    $ sed '=' file.txt

    Output

    There are five lines in the “file.txt” file. So, the line number is printed before each line of the file, as shown below:

    Conclusion

    In this tutorial, we have covered 50 simple SED commands with examples that demonstrate their execution in GNU SED (Stream Editor). If you are a newbie to Linux and wish to learn the basics of SED commands to perform string manipulations, this article will definitely help you.

    All in all, there are several SED commands that help you accomplish a wide range of tasks related to file manipulation, such as replacing a file content, deleting a file content, inserting an empty line, capitalizing characters, etc.

    People are also reading:

    Leave a Comment on this Post

    0 Comments