2.3 Using sedThere are two ways to invoke sed: either you specify your editing instructions on the command line or you put them in a file and supply the name of the file. 2.3.1 Specifying Simple InstructionsYou can specify simple editing commands on the command line.
The -e option is necessary only when you supply more than one instruction on the command line. It tells sed to interpret the next argument as an instruction. When there is a single instruction, sed is able to make that determination on its own. Let's look at some examples. Using the sample input file, list , the following example uses the s command for substitution to replace "MA" with "Massachusetts." $ Three lines are affected by the instruction but all lines are displayed. Enclosing the instruction in single quotes is not required in all cases but you should get in the habit of always doing it. The enclosing single quotes prevent the shell from interpreting special characters or spaces found in the editing instruction. (The shell uses spaces to determine individual arguments submitted to a program; characters that are special to the shell are expanded before the command is invoked.) For instance, the first example could have been entered without them but in the next example they are required, since the substitution command contains spaces: $ In order to place a comma between the city and state, the instruction replaced the space before the two-letter abbreviation with a comma and a space. There are three ways to specify multiple instructions on the command line:
In the example above, changes were made to five lines and, of course, all lines were displayed. Remember that nothing has changed in the input file. 2.3.1.1 Command garbledThe syntax of a sed command can be detailed, and it's easy to make a mistake or omit a required element. Notice what happens when incomplete syntax is entered: $ Sed will usually display any line that it cannot execute, but it does not tell you what is wrong with the command.[2] In this instance, a slash, which marks the search and replacement portions of the command, is missing at the end of the substitute command.
$ 2.3.2 Script FilesIt is not practical to enter longer editing scripts on the command line. That is why it is usually best to create a script file that contains the editing instructions. The editing script is simply a list of sed commands that are executed in the order in which they appear. This form, using the -f option, requires that you specify the name of the script file on the command line.
All the editing commands that we want executed are placed in a file. We follow a convention of creating temporary script files named sedscr . $ The following command reads all of the substitution commands in sedscr and applies them to each line in the input file list : $ Once again, the result is ephemeral, displayed on the screen. No change is made to the input file. If a sed script can be used again, you should rename the script and save it. Scripts of proven value can be maintained in a personal or system-wide library. 2.3.2.1 Saving outputUnless you are redirecting the output of sed to another program, you will want to capture the output in a file. This is done by specifying one of the shell's I/O redirection symbols followed by the name of a file: $ Do not redirect the output to the file you are editing or you will clobber it. (The ">" redirection operator truncates the file before the shell does anything else.) If you want the output file to replace the input file, you can do that as a separate step, using the mv command. But first make very sure your editing script has worked properly! In Chapter 4, Writing sed Scripts , we will look at a shell script named runsed that automates the process of creating a temporary file and using mv to overwrite the original file. 2.3.2.2 Suppressing automatic display of input linesThe default operation of sed is to output every input line. The -n option suppresses the automatic output. When specifying this option, each instruction intended to produce output must contain a print command, p . Look at the following example. $ Compare this output to the first example in this section. Here, only the lines that were affected by the command were printed. 2.3.2.3 Mixing options (POSIX)You can build up a script by combining both the -e and -f options on the command line. The script is the combination of all the commands in the order given. This appears to be supported in UNIX versions of sed, but this feature is not clearly documented in the manpage. The POSIX standard explicitly mandates this behavior. 2.3.2.4 Summary of optionsTable 2.1 summarizes the sed command-line options.
|
|