Next: Exit status, Previous: Overview, Up: Invoking sed [Contents][Index]
The full format for invoking sed
is:
sed OPTIONS... [SCRIPT] [INPUTFILE...]
sed
may be invoked with the following command-line options:
--version
Print out the version of sed
that is being run and a copyright notice,
then exit.
--help
Print a usage message briefly summarizing these command-line options and the bug-reporting address, then exit.
-n
--quiet
--silent
By default, sed
prints out the pattern space
at the end of each cycle through the script (see How sed
works).
These options disable this automatic printing,
and sed
only produces output when explicitly told to
via the p
command.
--debug
Print the input sed program in canonical form, and annotate program execution.
$ echo 1 | sed '\%1%s21232' 3 $ echo 1 | sed --debug '\%1%s21232' SED PROGRAM: /1/ s/1/3/ INPUT: 'STDIN' line 1 PATTERN: 1 COMMAND: /1/ s/1/3/ PATTERN: 3 END-OF-CYCLE: 3
-e script
--expression=script
Add the commands in script to the set of commands to be run while processing the input.
-f script-file
--file=script-file
Add the commands contained in the file script-file to the set of commands to be run while processing the input.
-i[SUFFIX]
--in-place[=SUFFIX]
This option specifies that files are to be edited in-place.
GNU sed
does this by creating a temporary file and
sending output to this file rather than to the standard
output.1.
This option implies -s.
When the end of the file is reached, the temporary file is renamed to the output file’s original name. The extension, if supplied, is used to modify the name of the old file before renaming the temporary file, thereby making a backup copy2).
This rule is followed: if the extension doesn’t contain a *
,
then it is appended to the end of the current filename as a
suffix; if the extension does contain one or more *
characters, then each asterisk is replaced with the
current filename. This allows you to add a prefix to the
backup file, instead of (or in addition to) a suffix, or
even to place backup copies of the original files into another
directory (provided the directory already exists).
If no extension is supplied, the original file is overwritten without making a backup.
Because -i takes an optional argument, it should not be followed by other short options:
sed -Ei '...' FILE
Same as -E -i with no backup suffix - FILE will be edited in-place without creating a backup.
sed -iE '...' FILE
This is equivalent to --in-place=E, creating FILEE as backup of FILE
Be cautious of using -n with -i: the former disables
automatic printing of lines and the latter changes the file in-place
without a backup. Used carelessly (and without an explicit p
command),
the output file will be empty:
# WRONG USAGE: 'FILE' will be truncated. sed -ni 's/foo/bar/' FILE
-l N
--line-length=N
Specify the default line-wrap length for the l
command.
A length of 0 (zero) means to never wrap long lines. If
not specified, it is taken to be 70.
--posix
GNU sed
includes several extensions to POSIX
sed. In order to simplify writing portable scripts, this
option disables all the extensions that this manual documents,
including additional commands.
Most of the extensions accept sed
programs that
are outside the syntax mandated by POSIX, but some
of them (such as the behavior of the N
command
described in Reporting Bugs) actually violate the
standard. If you want to disable only the latter kind of
extension, you can set the POSIXLY_CORRECT
variable
to a non-empty value.
-b
--binary
This option is available on every platform, but is only effective where the
operating system makes a distinction between text files and binary files.
When such a distinction is made—as is the case for MS-DOS, Windows,
Cygwin—text files are composed of lines separated by a carriage return
and a line feed character, and sed
does not see the
ending CR. When this option is specified, sed
will open
input files in binary mode, thus not requesting this special processing
and considering lines to end at a line feed.
--follow-symlinks
This option is available only on platforms that support
symbolic links and has an effect only if option -i
is specified. In this case, if the file that is specified
on the command line is a symbolic link, sed
will
follow the link and edit the ultimate destination of the
link. The default behavior is to break the symbolic link,
so that the link destination will not be modified.
-E
-r
--regexp-extended
Use extended regular expressions rather than basic
regular expressions. Extended regexps are those that
egrep
accepts; they can be clearer because they
usually have fewer backslashes.
Historically this was a GNU extension,
but the -E
extension has since been added to the POSIX standard
(http://austingroupbugs.net/view.php?id=528),
so use -E for portability.
GNU sed has accepted -E as an undocumented option for years,
and *BSD seds have accepted -E for years as well,
but scripts that use -E might not port to other older systems.
See Extended regular expressions.
-s
--separate
By default, sed
will consider the files specified on the
command line as a single continuous long stream. This GNU sed
extension allows the user to consider them as separate files:
range addresses (such as ‘/abc/,/def/’) are not allowed
to span several files, line numbers are relative to the start
of each file, $
refers to the last line of each file,
and files invoked from the R
commands are rewound at the
start of each file.
--sandbox
In sandbox mode, e/w/r
commands are rejected - programs containing
them will be aborted without being run. Sandbox mode ensures sed
operates only on the input files designated on the command line, and
cannot run external programs.
-u
--unbuffered
Buffer both input and output as minimally as practical. (This is particularly useful if the input is coming from the likes of ‘tail -f’, and you wish to see the transformed output as soon as possible.)
-z
--null-data
--zero-terminated
Treat the input as a set of lines, each terminated by a zero byte (the ASCII ‘NUL’ character) instead of a newline. This option can be used with commands like ‘sort -z’ and ‘find -print0’ to process arbitrary file names.
If no -e, -f, --expression, or --file options are given on the command-line, then the first non-option argument on the command line is taken to be the script to be executed.
If any command-line parameters remain after processing the above, these parameters are interpreted as the names of input files to be processed. A file name of ‘-’ refers to the standard input stream. The standard input will be processed if no file names are specified.
This applies to commands such as =
,
a
, c
, i
, l
, p
. You can
still write to the standard output by using the w
or W
commands together with the /dev/stdout
special file
Note that GNU sed
creates the backup
file whether or not any output is actually changed.
Next: Exit status, Previous: Overview, Up: Invoking sed [Contents][Index]