3.1.4. Command-line switches
All versions of sed support two switches, -e and -n. Though sed
usually separates multiple commands with semicolons (e.g., "H;d;"),
certain commands could not accept a semicolon command separator.
These include :labels, 't', and 'b'. These commands had to occur
last in a script, separated by -e option switches. For example:
# The 'ta' means jump to label :a if last s/// returns true
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' file
The -n switch turns off sed's default behavior of printing every
line. With -n, lines are printed only if explicitly told to. In
addition, for certain versions of sed, if an external script begins
with "#n" as its first two characters, the output is suppressed
(exactly as if -n had been entered on the command line). A list of
which versions appears in section 6.7.2., below.
GNU sed 4.x and ssed support additional switches. -l (lowercase L),
followed by a number, lets you adjust the default length of the 'l'
and 'L' commands (note that these implementations of sed also
support an argument to these commands, to tailor the length
separately of each occurrence of the command).
-i activates in-place editing (see section 4.41.1, below). -s
treats each file as a separate stream: sed by default joins all the
files, so $ represents the last line of the last file; 15 means the
15th line in the joined stream; and /abc/,/def/ might match across
files.
When -s is used, however all addresses refer to single files. For
example, $ represents the last line of each input file; 15 means
the 15th line of each input file; and /abc/,/def/ will be "reset"
(in other words, sed will not execute the commands and start
looking for /abc/ again) if a file ends before /def/ has been
matched. Note that -i automatically activates this interpretation
of addresses.