0% found this document useful (0 votes)
36 views32 pages

"Mastering sed for System Admins"

The document discusses using the sed stream editor to automate editing configuration files. It covers basic sed commands like substituting strings, adding and deleting lines, and making global changes across files. Character ranges and inserting text at the beginning of files are also demonstrated.

Uploaded by

d.vargas
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
36 views32 pages

"Mastering sed for System Admins"

The document discusses using the sed stream editor to automate editing configuration files. It covers basic sed commands like substituting strings, adding and deleting lines, and making global changes across files. Character ranges and inserting text at the beginning of files are also demonstrated.

Uploaded by

d.vargas
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 32

IT 341: Introduction to System Administration

Using sed
• Maintaining Configuration • Inserting Text at the
Files Beginning of a File
• The sed Stream Editor • Making More Than One
• Instructions to sed Change with sed
o Replacing a String with sed • Using Character Ranges
o Adding a Line with sed
with sed
o Deleting a Line with sed
• Changing File Text Inline
with sed
Maintaining Configuration Files
• Unix system administrators spend much of their time working
with text files
• Text files need to be configured for most major Unix services
and these files they need to be maintained
• In any working network things are always changing and the
text files that configure services must change too
• Most of these changes are straight-forward add a line delete
line or change a name
Maintaining Configuration Files
• Changing the name of something often involves making
changes in more than one configuration file
• If you fail to make the needed changes in all affected files
some important services will stop working
• System administrators need a way to make changes quickly
and accurately in many files at the same time
• The sed stream editor helps to automate this task
The sed Stream Editor

• sed allows you to automate the process of editing a file


• With sed you can write a line or two of code that will make
multiple changes to a file
• sed takes input from one source makes changes to the text
from that source and sends the altered text to standard output
• sed is called a stream editor because it can be used in a
pipeline to transform a stream of data
The sed Stream Editor
• sed takes input from its second argument or standard input and
sends the transformed text to standard output
• sed can be used to modify a file by redirecting standard input to
come from that file and redirecting standard output to go to a new
file
• The general form of a sed command is
sed 'SED_INSTRUCTIONS' INPUT_FILE > OUTPUT_FILE
Instructions to sed
• The first argument to sed is a sed command telling it
how to modify the file
• These commands take many forms and should be
contained in single quotes
• You will find a good introduction to the sed commands
at http://www.grymoire.com/Unix/Sed.html
• A glance at this page will show that sed commands can
be complex
Instructions to sed
• But while sed has a lot of power and can do many
things most people only use a few simple commands
• sed is most frequently used to:
Substitute one string for another
Add a line
Delete a line
Replacing a String with sed

• The most common use of sed is to replace one string with


another
• The format for the sed command to do this is
s/OLD_STRING/NEW_STRING/
• The s tells sed you want it to substitute
• The / is used to set off two patterns
• The first pattern is what needs to be replaced and the second
pattern is what it will be replaced with
Replacing a String with sed

• If we have a text file day.txt containing


day
I am looking for daylight
night and day
day after day after day
• We could replace instances of "day" with "night" with the
following
sed 's/day/night/' day.txt
Replacing a String with sed
• Running this, we get
$ sed 's/day/night/' day.txt
night
I am looking for nightlight
night and night
night after day after day
• The output from sed goes to standard output unless you
redirect it
• Notice the last line. Only the first instance of "day" was
replaced with "night"
Replacing a String with sed
• Normally the s command only replaces the first string it
finds on a line
• If we want sed to replace every string on the line we must
follow the last pattern with the g option
$ sed s/day/night/g day.txt
night
I am looking for nightlight
night and night
night after night after night
• The g stands for global
Delimiting Patterns

• A delimiter is a sequence of one or more characters used to


mark the boundary between different parts of a string
• The delimiter most often used to mark off patterns in sed is
the slash, /
• But this can cause problems in certain situations
• In Unix and Linux, / is used to separates the names of
directories in a path
/courses/it341/f13/ghoffmn
Delimiting Patterns
• How could you use sed to replace "f13/ghoffmn" with
"s14/abird" in the path above using / as a delimiter?
• But you don't have to use /
• The s command uses the very next character as the
delimiter
• So if course_directory.txt contained the path above I could
change the text with the following sed instruction
's|f13/ghoffmn|s14/abird|'
Delimiting Patterns

• You have to put the instructions in single quotes, '' because | is


the pipe character and has special meaning to the shell

$ cat course_directory.txt
/courses/it341/f13/ghoffmn

$ sed 's|f13/ghoffmn|s14/abird|' course_directory.txt


/courses/it341/s14/abird
Adding a Line with sed
• sed can be used to add a line of text to a file
• The format for this sed instruction is
/STRING/a\
LINE_OF_TEXT
• The \ turns off the special meaning of the newline
which is to signal to the shell that you are done with
the command
• This command will add the line of text after every line
that contains STRING
Adding a Line with sed
• When you write a sed instruction to add a line you
must include all of the instructions inside single quotes
• To add a line after the second line of day.txt
day
I am looking for daylight
night and day
day after day after day
Adding a Line with sed
• …we could use sed like this:
$ sed ' /looking/a \
> and looking and looking \
> ' day.txt
day
I am looking for daylight
and looking and looking
all the live long day
night and day
day after day after day
Adding a Line with sed
• Notice that after I hit the Return or Enter to move down to
the second line the shell prints >
• This is the secondary prompt that you get when you
continue a command onto another line
• Notice that I had to put the name of the file day.txt outside
the quote
• The second \ turns off the special meaning of newline at
the end of the added text – allowing me to add a newline
character at the end of my text
Adding a Line with sed
• If I did not do this, the new line would be inserted on
the same line as the text that follows
$ sed ' /looking/a \
> and looking and looking' day.txt
day
I am looking for daylight
and looking and lookingall the live long day
night and day
day after day after day
Adding a Line with sed
• sed will add text after every line that matches a pattern
$ sed ' /day/a \
> a new line of text \
> ' day.txt
day
a new line of text
I am looking for daylight
a new line of text
all the live long day
a new line of text
night and day
a new line of text
day after day after day
a new line of text
Adding a Line with sed
• You can add more than one line in this way as long as
you put a \ at the end of each line
$ sed '/looking/a \
> first line after looking\
> second line after looking\
> third line after looking\
> ' day.txt
day
I am looking for daylight
first line after looking
second line after looking
third line after looking
night and day
day after day after day
Deleting a Line with sed
• You can also use sed to delete a line
• The delete instruction has the following format
/STRING/d
• where STRING is some text that can only be found on the
line to be deleted
• To delete the last line of day.txt…we could use:
day $ sed /after/d day.txt
I am looking for daylight day
night and day I am looking for daylight
day after day after day
night and day
Inserting Text at the Beginning of a File

• The a command add text after a line which contains


some string
• But what if you wanted to insert the text before a line
which contains a string?
• Then you would have to use the i command
• If we have the file fox.txt that contains
The quick brown fox
jumped over
the lazy dogs.
Inserting Text at the Beginning of a File

• …and wanted to add a line at the beginning of the file we could do it


like this:
sed '/quick/ i\
> Here is something you have seen many times:' fox.txt
Here is something you have seen many times:
The quick brown fox
jumped over
the lazy dogs.
Making More Than One Change with sed

• Each sed command changes one thing


• If you wanted to make several changes with a single
command line entry you can use pipes
• If we have the file colors.txt

red blue green


light red light blue light green
dark green dark red
Making More Than One Change with sed

• …we can capitalize all the colors with the following:


sed 's/red/Red/' colors.txt | sed 's/green/Green/' | sed 's/blue/Blue/‘
Red Blue Green
light Red light Blue light Green
dark Green dark Red
Using Character Ranges with sed
• sed let's you use ranges of characters to match strings
• Let's say we have the following in the file
letters_digits.txt
abcd 1234 5678
• If we wanted to replace every instance of the digits 1
through 4 with the single character x we could write
sed 's/[1-4]/x/g' letters_digits.txt
abcd xxxx 5678
Using Character Ranges with sed
• Notice the g I had to add to the end of the substitution
command
• If I left this out, I would get
sed 's/[1-4]/x/' letters_digits.txt
abcd 234 5678
Changing File Text in place with sed
• The default behavior of sed is to print the changes made to
standard output
• However, you may also use the –i option to tell sed to
make the change in place, inside the file itself
• Consider the file roses.txt:
$ cat roses.txt
Roses are red,
And violets are blue.
Sugar is sweet,
and so are you.
Changing File Text in place with sed
• Now, execute this command:
sed -i 's/Roses/Poinsettias/' roses.txt
• You will not see the usual output, but if you look at the file
text again, it will be changed:
$ cat roses.txt
Poinsettias are red,
And violets are blue.
Sugar is sweet,
and so are you.
Changing File Text in place with sed
• In addition, you may want to save a backup copy of the
original, which you can do by specifying a suffix when using
the –i option:
sed –i.bk '/violets/a\(In that case...\
...should you not call them blues?)' roses.txt
• First, you will now notice that there is a new file:
$ ls
roses.txt roses.txt.bk
Changing File Text in place with sed
• The original file will reflect the changes made:
$ cat roses.txt
Poinsettias are red,
And violets are blue.
(In that case...
...should you not call them blues?)
Sugar is sweet,
and so are you.
• The backup file, however, will show the original file text
$ cat roses.txt.bk
Poinsettias are red,
And violets are blue.
Sugar is sweet,
and so are you.

You might also like