What is sed?
Sed is a stream editor which is used to perform basic text transformations on an input stream (a file or input from a pipeline) or filter strings. It permits to modify the contents of different lines in a file, based on some parameters.
For the examples shown in this article, you used the 4.2.1 version of sed as shown below:
sed --version GNU sed version 4.2.1 Copyright (C) 2009 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, to the extent permitted by law.
Sed has a syntax as follows:
sed [-options] [command] [<file(s)>]
Visualization
For the cases where you need to display the contents of a file or part of it, we can use any of the following commands:
sed 5q file1 # see the firsts 5 lines of file1 cat -n file1 | sed -n '5,6 p' # see lines 5 and 6 of file1 sed -n '1p' file1 > file2 # copy the first line of file1 to file2 sed -n '$p' file1 # show the last line of file1
Replacing strings and characters
In these cases, it is always advisable storing in another file, the results of a substitution, leaving the original file unchanged. Some examples are:
# replace strings in all lines that satisfied the string of file1 and store the result in file2 sed 's/old_string/new_string/g' file1 > file2 # replace strings only in lines 200 y 201 sed '200,201 s/old_string/new_string/g' file1 > file2 # replace several strings by new one sed 's/old_string_1\|old_string_2/new_string/g' file1 > file2 # replace all lowercase to uppercase sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' file1 > file2
Insert strings
As in the previous case, the original file is left unchanged while the second will contain the changes.
# insert a string at the beginning of each line sed 's/^/string_at_the_beginning/' file1 >file2 # insert a string at the end of the file sed -e '$ string_at_the_end' file > file2 # insert a blank line before each line that matches with string sed '/string/{x;p;x;}' file1 > file2 # insert a blank line after each line that matches with string sed '/string/G' file1 > file2 # insert a blank line before and other after each line that matches with string sed '/string/{x;p;x;G;}' file1 > file2 # insert a blank line every 2 lines sed 'n;G;' file1 > file2
Delete lines and strings
If we want to delete characters or entire lines, either because they are empty or commented, we can use the following commands:
sed '2,4 d' file1 > file2 # remove lines 100 and 105 of file1 sed '5,20 !d' file1 > file2 # delete all lines except the 5 and 20 sed '$d' file1 > file2 # delete the last line of file1 sed -i '$d' file1 # delete the last line of file1 in the same file sed '/string/ d' file1 > file2 # remove lines that satisfied a string sed '/^$/d' file1 > file2 # remove blank lines sed '/^$/d; / *#/d' file1 > file2 # remove blank lines and bash comments