xref: /original-bsd/usr.bin/sed/sed.1 (revision 02e832b2)
1.\" Copyright (c) 1992 The Regents of the University of California.
2.\" All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the Institute of Electrical and Electronics Engineers, Inc.
6.\"
7.\" %sccs.include.redist.roff%
8.\"
9.\"	@(#)sed.1	5.2 (Berkeley) 08/24/92
10.\"
11.Dd ""
12.Dt SED 1
13.Os
14.Sh NAME
15.Nm sed
16.Nd stream editor
17.Sh SYNOPSIS
18.Nm sed
19.Op Fl an
20.Ar command
21.Op Ar file ...
22.Nm sed
23.Op Fl an
24.Op Fl e Ar command
25.Op Fl f Ar command_file
26.Op Ar file ...
27.Sh DESCRIPTION
28The
29.Nm sed
30utility reads the specified files, or the standard input if no files
31are specified, modifying the input as specified by a list of commands.
32The input is then written to the standard output.
33.Pp
34A single command may be specified as the first argument to
35.Nm sed .
36Multiple commands may be specified by using the
37.Fl e
38or
39.Fl f
40options.
41All commands are applied to the input in the order they are specified
42regardless of their origin.
43.Pp
44The following options are available:
45.Bl -tag -width indent
46.It Fl a
47The files listed as parameters for the
48.Dq w
49functions are created (or truncated) before any processing begins,
50by default.
51The
52.Fl a
53option causes
54.Nm sed
55to delay opening each file until a command containing the related
56.Dq w
57function is applied to a line of input.
58.It Fl e Ar command
59Append the editing commands specified by the
60.Ar command
61argument
62to the list of commands.
63.It Fl f Ar command_file
64Append the editing commands found in the file
65.Ar command_file
66to the list of commands.
67The editing commands should each be listed on a separate line.
68.It Fl n
69By default, each line of input is echoed to the standard output after
70all of the commands have been applied to it.
71The
72.Fl n
73option suppresses this behavior.
74.El
75.Pp
76The form of a
77.Nm sed
78command is as follows:
79.sp
80.Dl [address[,address]]function[arguments]
81.sp
82Whitespace may be inserted before the first address and the function
83portions of the command.
84.Pp
85Normally,
86.Nm sed
87cyclically copies a line of input, not including its terminating newline
88character, into a
89.Em "pattern space" ,
90(unless there is something left after a
91.Dq D
92function),
93applies all of the commands with addresses that select that pattern space,
94copies the pattern space to the standard output, appending a newline, and
95deletes the pattern space.
96.Pp
97Some of the functions use a
98.Em "hold space"
99to save all or part of the pattern space for subsequent retrieval.
100.Sh "Sed Addresses"
101An address is not required, but if specified must be a number (that counts
102input lines
103cumulatively across input files), a dollar
104.Po
105.Dq $
106.Pc
107character that addresses the last line of input, or a context address
108(which consists of a regular expression preceded and followed by a
109delimiter).
110.Pp
111A command line with no addresses selects every pattern space.
112.Pp
113A command line with one address selects all of the pattern spaces
114that match the address.
115.Pp
116A command line with two addresses selects the inclusive range from
117the first pattern space that matches the first address through the next
118pattern space that matches the second.
119(If the second address is a number less than or equal to the line number
120first selected, only that line is selected.)
121Starting at the first line following the selected range,
122.Nm sed
123starts looking again for the first address.
124.Pp
125Editing commands can be applied to non-selected pattern spaces by use
126of the exclamation character
127.Po
128.Dq !
129.Pc
130function.
131.Sh "Sed Regular Expressions"
132The
133.Nm sed
134regular expressions are basic regular expressions (BRE's, see
135.Xr regex 3
136for more information).
137In addition,
138.Nm sed
139has the following two additions to BRE's:
140.sp
141.Bl -enum -compact
142.It
143In a context address, any character other than a backslash
144.Po
145.Dq \e
146.Pc
147or newline character may be used to delimit the regular expression.
148Also, putting a backslash character before the delimiting character
149causes the character to be treated literally.
150For example, in the context address \exabc\exdefx, the RE delimiter
151is an
152.Dq x
153and the second
154.Dq x
155stands for itself, so that the regular expression is
156.Dq abcxdef .
157.sp
158.It
159The escape sequence \en matches a newline character embedded in the
160pattern space.
161You can't, however, use a literal newline character in an address or
162in the substitute command.
163.El
164.Pp
165One special feature of
166.Nm sed
167regular expressions is that they can default to the last regular
168expression used.
169If a regular expression is empty, i.e. just the delimiter characters
170are specified, the last regular expression encountered is used instead.
171The last regular expression is defined as the last regular expression
172used as part of an address or substitute command, and at run-time, not
173compile-time.
174For example, the command
175.Dq /abc/s//XXX/
176will substitute
177.Dq XXX
178for the pattern
179.Dq abc .
180.Sh "Sed Functions"
181In the following list of commands, the maximum number of permissible
182addresses for each command is indicated by [0addr], [1addr], or [2addr],
183representing zero, one, or two addresses.
184.Pp
185The argument
186.Em text
187consists of one or more lines.
188To embed a newline in the text, precede it with a backslash.
189Other backslashes in text are deleted and the following character
190taken literally.
191.Pp
192The
193.Dq r
194and
195.Dq w
196functions take an optional file parameter, which should be separated
197from the function letter by white space.
198Each file given as an argument to
199.Nm sed
200is created (or its contents truncated) before any input processing begins.
201.Pp
202The
203.Dq b ,
204.Dq r ,
205.Dq s ,
206.Dq t ,
207.Dq w ,
208.Dq y ,
209.Dq ! ,
210and
211.Dq \&:
212functions all accept additional arguments.
213The following synopses indicate which arguments have to be separated from
214the function letters by white space characters.
215.Pp
216Two of the functions take a function-list.
217This is a list of
218.Nm sed
219functions separated by newlines, as follows:
220.Bd -literal -offset indent
221{ function
222  function
223  ...
224  function
225}
226.Ed
227.Pp
228The
229.Dq {
230can be preceded by white space and can be followed by white space.
231The function can be preceded by white space.
232The terminating
233.Dq }
234must be preceded by a newline an optional white space.
235.sp
236.Bl -tag -width "XXXXXX" -compact
237.It [2addr] function-list
238Execute function-list only when the pattern space is selected.
239.sp
240.It [1addr]a\e
241.It text
242.br
243Write
244.Em text
245to standard output immediately before each attempt to read a line of input,
246whether by executing the
247.Dq N
248function or by beginning a new cycle.
249.sp
250.It [2addr]b[lable]
251Branch to the
252.Dq \&:
253function with the specified label.
254If the label is not specified, branch to the end of the script.
255.sp
256.It [2addr]c\e
257.It text
258.br
259Delete the pattern space.
260With 0 or 1 address or at the end of a 2-address range,
261.Em text
262is written to the standard output.
263.sp
264.It [2addr]d
265Delete the pattern space and start the next cycle.
266.sp
267.It [2addr]D
268Delete the initial segment of the pattern space through the first
269newline character and start the next cycle.
270.sp
271.It [2addr]g
272Replace the contents of the pattern space with the contents of the
273hold space.
274.sp
275.It [2addr]G
276Append a newline character followed by the contents of the hold space
277to the pattern space.
278.sp
279.It [2addr]h
280Replace the contents of the hold space with the contents of the
281pattern space.
282.sp
283.It [2addr]H
284Append a newline character followed by the contents of the pattern space
285to the hold space.
286.sp
287.It [1addr]i\e
288.It text
289.br
290Write
291.Em text
292to the standard output.
293.sp
294.It [2addr]l
295(The letter ell.)
296Write the pattern space to the standard output in a visually unambiguous
297form.
298This form is as follows:
299.sp
300.Bl -tag -width "carriage-returnXX" -offset indent -compact
301.It backslash
302\e
303.It alert
304\ea
305.It form-feed
306\ef
307.It newline
308\en
309.It carriage-return
310\er
311.It tab
312\et
313.It vertical tab
314\ev
315.El
316.Pp
317Nonprintable characters are written as three-digit octal numbers (with a
318preceding backslash) for each byte in the character (most significant byte
319first).
320Long lines are folded, with the point of folding indicated by displaying
321a backslash followed by a newline.
322The end of each line is marked with a
323.Dq $ .
324.sp
325.It [2addr]n
326Write the pattern space to the standard output if the default output has
327not been suppressed, and replace the pattern space with the next line of
328input.
329.sp
330.It [2addr]N
331Append the next line of input to the pattern space, using an embedded
332newline character to separate the appended material from the original
333contents.
334Note that the current line number changes.
335.sp
336.It [2addr]p
337Write the pattern space to standard output.
338.sp
339.It [2addr]P
340Write the pattern space, up to the first newline character to the
341standard output.
342.sp
343.It [1addr]q
344Branch to the end of the script and quit without starting a new cycle.
345.sp
346.It [1addr]r file
347Copy the contents of
348.Em file
349to the standard output immediately before the next attempt to read a
350line of input.
351If
352.Em file
353cannot be read for any reason, it is silently ignored and no error
354condition is set.
355.sp
356.It [2addr]s/regular expression/replacement/flags
357Substitute the replacement string for the first instance of the regular
358expression in the pattern space.
359Any character other than backslash or newline can be used instead of
360a slash to delimit the RE and the replacement.
361Within the RE and the replacement, the RE delimiter itself can be used as
362a literal character if it is preceded by a backslash.
363.Pp
364An ampersand
365.Po
366.Dq &
367.Pc
368appearing in the replacement is replaced by the string matching the RE.
369The special meaning of
370.Dq &
371in this context can be suppressed by preceding it by backslash.
372The string
373.Dq \e# ,
374where
375.Dq #
376is a digit, is replaced by the text matched
377by the corresponding backreference expression (see
378.Xr re_format 7 ).
379.Pp
380A line can be split by substituting a newline character into it.
381To specify a newline character in the replacement string, precede it with
382a backslash.
383.Pp
384The value of
385.Em flags
386in the substitute function is zero or more of the following:
387.Bl -tag -width "XXXXXX" -offset indent
388.It "0 ... 9"
389Make the substitution only for the N'th occurrence of the regular
390expression in the pattern space.
391.It g
392Make the substitution for all non-overlapping matches of the
393regular expression, not just the first one.
394.It p
395Write the pattern space to standard output if a replacement was made.
396If the replacement string is identical to that which it replaces, it
397is still considered to have been a replacement.
398.It w Em file
399Append the pattern space to
400.Em file
401if a replacement was made.
402If the replacement string is identical to that which it replaces, it
403is still considered to have been a replacement.
404.El
405.sp
406.It [2addr]t [label]
407Branch to the
408.Dq :
409function bearing the label if any substitutions have been made since the
410most recent reading of an input line or execution of a
411.Dq t
412function.
413If no label is specified, branch to the end of the script.
414.sp
415.It [2addr]w Em file
416Append the pattern space to the
417.Em file .
418.sp
419.It [2addr]x
420Swap the contents of the pattern and hold spaces.
421.sp
422.It [2addr]y/string1/string2/
423Replace all occurrences of characters in
424.Em string1
425in the pattern space with the corresponding characters from
426.Em string2 .
427Any character other than a backslash or newline can be used instead of
428a slash to delimit the strings.
429Within
430.Em string1
431and
432.Em string2 ,
433the delimiter itself can be used as a literal character if it is preceded
434by a backslash.
435.sp
436.It [2addr]!function
437.It [2addr]!function-list
438Apply the function or function-list only to the lines that are
439.Em not
440selected by the address(es).
441.sp
442.It [0addr]:label
443This function does nothing; it bears a label to which the
444.Dq b
445and
446.Dq t
447commands may branch.
448.sp
449.It [1addr]=
450Write the line number to the standard output followed by a newline
451character.
452.sp
453.It [0addr]
454Empty lines are ignored.
455.sp
456.It [0addr]#
457The
458.Dq #
459and the remainder of the line are ignored (treated as a comment), with
460the single exception that if the first two characters in the file are
461.Dq #n ,
462the default output is suppressed.
463This is the same as specifying the
464.Fl n
465option on the command line.
466.El
467.Pp
468The
469.Nm sed
470utility exits 0 on success and >0 if an error occurs.
471.Sh SEE ALSO
472.Xr awk 1 ,
473.Xr ed 1 ,
474.Xr grep 1 ,
475.Xr regex 3 ,
476.Xr re_format 7
477.Sh HISTORY
478A
479.Nm sed
480command appeared in
481.At v7 .
482.Sh STANDARDS
483The
484.Nm sed
485function is expected to be a superset of the
486.St -p1003.2
487specification.
488