Hands-off editing with sed, Part 1

Unix Insider |  Operating Systems Add a new comment

With the sed utility (otherwise known as the Unix stream editor), you can alter files without opening them in an interactive editor. Instead, you use sed to specify a series of rules (edits) or transformations that you want applied to lines of text, then apply them to your file.

sed is not suitable as a general purpose editor, and is best used to apply a set of modifications to text, particularly if you're managing more than one file. If you want to run a series of once-only edits, you are better off directly editing a file using vi or Emacs, as using sed will take much longer. But if you need to make systematic changes across multiple files, then sed is your best bet.

For example, suppose you've written a book using vi. In it, your heroine is named Brunhilda Mathewhowsenstern, to whom you occasionally apply the nickname Brunie. You have already saved each of the book's 66 chapters as separate text files -- chap01.txt, chap02.txt, etc. -- and have just received the go-ahead from your publisher when, horror of horrors, a real person named Brunhilda Mathewhowsenstern shows up and threatens a suit if you use her name in the book. After considerable research you discover that the name Mathilda Leapfrogandrun is unclaimed by any litigious miscreants, so you resolve to change your heroine's name to this, with the new nickname Mattie replacing Brunie. You might think that you have a lot of work ahead of you, since you have to open all 66 files in vi or some other editor to make this fix.

At this point, the real heroine, the sed utility, rides to the rescue, allowing you to devise a script of editing actions to be applied one after another to each of the 66 chapters. You will be able to effect these changes without opening a single file. The script will apply three rules:

  1. Locate all instances of "Brunhilda" and change them to "Mathilda"
  2. Locate all instances of "Mathewhowsenstern" and change them to "Leapfrogandrun"
  3. Locate all instances of "Brunie" and change them to "Mattie"

How will all this work? Let's cover some basic features of the sed utility to find out.

Some sed basics

We'll start our exploration of sed with the following command:

sed [options] script input_file

Here, script is a set of actions to perform on a file named input_file. The output of sed is sent to standard output; in order to save the result of the sed actions you need to redirect this output:

sed [options] script input_file >output_file

Do not redirect the output to the file you're editing or you'll clobber the file.

sed can also be used on an input stream. The named input_file is optional; if unspecified, sed will take its input from the keyboard. The command

sed script >output_file

will take everything typed on the keyboard, apply it to the script, and place the result in output_file. This also provides a handy mechanism for testing sed scripts. By using the command

sed script

everything typed into the keyboard will be processed according to script and printed out on the screen.

In interactive editors like vi or Emacs, it's necessary to explicitly tell the editor when to apply commands to the entire text. The sed editor does this automatically by applying each script command to each line in the input file.

First, let's try a simple substitution script. The syntax of the substitution command is:

s/search text/replacement text/g

The optional g at the end of the line signals that the search-and-replace process is to be applied to all instances of the search text found in each line; without this option, the process would be applied only to the first instance found in each line of text.

    Add a comment

    Post a comment using one of these accounts
    Or join now
    At least 6 characters

    Note: Comment will appear soon after you have activated your account.
    Obscene/spam comments will be removed and accounts suspended.
    The information you submit is subject to our Privacy Policy and Terms of Service.

    ITworld LIVE

    Operating SystemsWhite Papers & Webcasts

    White Paper

    Microsoft Enterprise Agreement Program Overview

    Discover how flexible the Microsoft Enterprise Agreement Program is to help you build the right software solution agreement for your business. This paper highlights all the available options-from on-premise software and cloud service solutions, to payment options and enrollment programs, and more.

    White Paper

    Watson - A System Designed for Answers. The future of workload optimized systems design

    Watson is a workload optimized system designed for complex analytics, made possible by integrating massively parallel POWER7 processors and DeepQA technology. Read the white paper about Watson's workload optimized system design.

    See more White Papers | Webcasts

    Ask a question

    Ask a Question