Next: Multiple commands syntax, Previous: Programming Commands, Up: sed scripts [Contents][Index]
sed
These commands are specific to GNU sed
, so you
must use them with care and only when you are sure that
hindering portability is not evil. They allow you to check
for GNU sed
extensions or to do tasks that are required
quite often, yet are unsupported by standard sed
s.
e [command]
This command allows one to pipe input from a shell command
into pattern space. Without parameters, the e
command
executes the command that is found in pattern space and
replaces the pattern space with the output; a trailing newline
is suppressed.
If a parameter is specified, instead, the e
command
interprets it as a command and sends its output to the output stream.
The command can run across multiple lines, all but the last ending with
a back-slash.
In both cases, the results are undefined if the command to be executed contains a NUL character.
Note that, unlike the r
command, the output of the command will
be printed immediately; the r
command instead delays the output
to the end of the current cycle.
F
Print out the file name of the current input file (with a trailing newline).
Q [exit-code]
This command accepts only one address.
This command is the same as q
, but will not print the
contents of pattern space. Like q
, it provides the
ability to return an exit code to the caller.
This command can be useful because the only alternative ways to accomplish this apparently trivial function are to use the -n option (which can unnecessarily complicate your script) or resorting to the following snippet, which wastes time by reading the whole file without any visible effect:
:eat $d Quit silently on the last line N Read another line, silently g Overwrite pattern space each time to save memory b eat
R filename
Queue a line of filename to be read and inserted into the output stream at the end of the current cycle, or when the next input line is read. Note that if filename cannot be read, or if its end is reached, no line is appended, without any error indication.
As with the r
command, the special value /dev/stdin
is supported for the file name, which reads a line from the
standard input.
T label
Branch to label only if there have been no successful
s
ubstitutions since the last input line was read or
conditional branch was taken. The label may be omitted,
in which case the next cycle is started.
v version
This command does nothing, but makes sed
fail if
GNU sed
extensions are not supported, simply because other
versions of sed
do not implement it. In addition, you
can specify the version of sed
that your script
requires, such as 4.0.5
. The default is 4.0
because that is the first version that implemented this command.
This command enables all GNU extensions even if
POSIXLY_CORRECT
is set in the environment.
W filename
Write to the given filename the portion of the pattern space up to
the first newline. Everything said under the w
command about
file handling holds here too.
z
This command empties the content of pattern space. It is
usually the same as ‘s/.*//’, but is more efficient
and works in the presence of invalid multibyte sequences
in the input stream. POSIX mandates that such sequences
are not matched by ‘.’, so that there is no portable
way to clear sed
’s buffers in the middle of the
script in most multibyte locales (including UTF-8 locales).
Next: Multiple commands syntax, Previous: Programming Commands, Up: sed scripts [Contents][Index]