Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SED(1)			    General Commands Manual			SED(1)

NAME
       sed -- stream editor

SYNOPSIS
       sed [-Ealnru] command [-I extension] [-i	extension] [file ...]
       sed   [-Ealnru]	 [-e   command]	  [-f	command_file]  [-I  extension]
	   [-i extension] [file	...]

DESCRIPTION
       The sed utility reads the specified files, or the standard input	if  no
       files are specified, modifying the input	as specified by	a list of com-
       mands.  The input is then written to the	standard output.

       A single	command	may be specified as the	first argument to sed.	Multi-
       ple  commands may be specified by using the -e or -f options.  All com-
       mands are applied to the	input in the order they	are specified  regard-
       less of their origin.

       The following options are available:

       -E      Interpret  regular expressions as extended (modern) regular ex-
	       pressions rather	than basic regular expressions	(BRE's).   The
	       re_format(7) manual page	fully describes	both formats.

       -a      The  files  listed as parameters	for the	"w" functions are cre-
	       ated (or	truncated) before any processing begins,  by  default.
	       The  -a	option	causes	sed to delay opening each file until a
	       command containing the related "w" function  is	applied	 to  a
	       line of input.

       -e command
	       Append  the  editing commands specified by the command argument
	       to the list of commands.

       -f command_file
	       Append the editing commands found in the	file  command_file  to
	       the  list  of  commands.	  The  editing commands	should each be
	       listed on a separate line.  The	commands  are  read  from  the
	       standard	input if command_file is "-".

       -I extension
	       Edit   files   in-place,	 saving	 backups  with	the  specified
	       extension.  If a	zero-length extension is given,	no backup will
	       be  saved.   It	is  not	 recommended  to  give	a  zero-length
	       extension  when	in-place editing files,	as you risk corruption
	       or partial content in situations	where disk space is exhausted,
	       etc.

	       Note that in-place editing with -I still	takes place in a  sin-
	       gle  continuous line address space covering all files, although
	       each file preserves its individuality instead  of  forming  one
	       output  stream.	The line counter is never reset	between	files,
	       address ranges can span file boundaries,	and  the  "$"  address
	       matches	only  the  last	 line  of  the	last  file.  (See "Sed
	       Addresses".)  That can lead to unexpected results in many cases
	       of in-place editing, where using	-i is desired.

       -i extension
	       Edit files in-place similarly to	-I, but	treat each file	 inde-
	       pendently  from	other  files.	In particular, line numbers in
	       each file start at 1, the "$" address matches the last line  of
	       the current file, and address ranges are	limited	to the current
	       file.  (See "Sed	Addresses".)  The net result is	as though each
	       file were edited	by a separate sed instance.

       -l      Make output line	buffered.

       -n      By default, each	line of	input is echoed	to the standard	output
	       after  all of the commands have been applied to it.  The	-n op-
	       tion suppresses this behavior.

       -r      Same as -E for compatibility with GNU sed.

       -u      Make output unbuffered.

       The form	of a sed command is as follows:

	     [address[,address]]function[arguments]

       Whitespace may be inserted before the first address  and	 the  function
       portions	of the command.

       Normally, sed cyclically	copies a line of input,	not including its ter-
       minating	 newline  character,  into  a  pattern space, (unless there is
       something left after a "D" function), applies all of the	commands  with
       addresses  that	select that pattern space, copies the pattern space to
       the standard output, appending  a  newline,  and	 deletes  the  pattern
       space.

       Some  of	the functions use a hold space to save all or part of the pat-
       tern space for subsequent retrieval.

Sed Addresses
       An address is not required, but if specified must have one of the  fol-
       lowing formats:

	     o	 a  number  that  counts input lines cumulatively across input
		 files (or in each file	independently if a -i option is	in ef-
		 fect);

	     o	 a dollar ("$")	character that addresses the last line of  in-
		 put  (or the last line	of the current file if a -i option was
		 specified);

	     o	 a context address that	consists of a regular expression  pre-
		 ceded and followed by a delimiter.  The closing delimiter can
		 also optionally be followed by	the "I"	character, to indicate
		 that the regular expression is	to be matched in a case-insen-
		 sitive	way.

       A command line with no addresses	selects	every pattern space.

       A  command line with one	address	selects	all of the pattern spaces that
       match the address.

       A command line with two addresses selects  an  inclusive	 range.	  This
       range  starts  with  the	first pattern space that matches the first ad-
       dress.  The end of the range is the next	following pattern  space  that
       matches	the  second  address.	If the second address is a number less
       than or equal to	the line number	first selected,	only that line is  se-
       lected.	 The number in the second address may be prefixed with a ("+")
       to specify the number of	lines to match after the  first	 pattern.   In
       the case	when the second	address	is a context address, sed does not re-
       match  the  second  address  against the	pattern	space that matched the
       first address.  Starting	at  the	 first	line  following	 the  selected
       range, sed starts looking again for the first address.

       Editing	commands  can be applied to non-selected pattern spaces	by use
       of the exclamation character ("!") function.

Sed Regular Expressions
       The regular expressions used in sed, by default,	are basic regular  ex-
       pressions  (BREs,  see re_format(7) for more information), but extended
       (modern)	regular	expressions can	be used	instead	 if  the  -E  flag  is
       given.  In addition, sed	has the	following two additions	to regular ex-
       pressions:

       1.   In	a  context address, any	character other	than a backslash ("\")
	    or newline character may be	used to	delimit	 the  regular  expres-
	    sion.   The	 opening delimiter needs to be preceded	by a backslash
	    unless it is a slash.  For example,	the context address \xabcx  is
	    equivalent	to  /abc/.  Also, putting a backslash character	before
	    the	delimiting character within the	regular	expression causes  the
	    character  to  be  treated literally.  For example,	in the context
	    address \xabc\xdefx, the RE	delimiter is an	"x" and	the second "x"
	    stands for itself, so that the regular expression is "abcxdef".

       2.   The	escape sequence	\n matches a newline character embedded	in the
	    pattern space.  You	cannot,	however, use a literal newline charac-
	    ter	in an address or in the	substitute command.

       One special feature of sed regular expressions is that they can default
       to the last regular expression used.  If	a regular expression is	empty,
       i.e., just the delimiter	characters are specified, the last regular ex-
       pression	encountered is used instead.  The last regular	expression  is
       defined	as  the	 last regular expression used as part of an address or
       substitute command, and at run-time, not	 compile-time.	 For  example,
       the command "/abc/s//XXX/" will substitute "XXX"	for the	pattern	"abc".

Sed Functions
       In  the	following  list	of commands, the maximum number	of permissible
       addresses for  each  command  is	 indicated  by	[0addr],  [1addr],  or
       [2addr],	representing zero, one,	or two addresses.

       The argument text consists of one or more lines.	 To embed a newline in
       the  text,  precede it with a backslash.	 Other backslashes in text are
       deleted and the following character taken literally.

       The "r" and "w" functions take an optional file parameter, which	should
       be separated from the function letter by	white space.  Each file	 given
       as an argument to sed is	created	(or its	contents truncated) before any
       input processing	begins.

       The "b",	"r", "s", "t", "w", "y", "!", and ":" functions	all accept ad-
       ditional	 arguments.   The  following synopses indicate which arguments
       have to be separated from the function letters by white	space  charac-
       ters.

       Two of the functions take a function-list.  This	is a list of sed func-
       tions separated by newlines, as follows:

	     { function
	       function
	       ...
	       function
	     }

       The  "{"	 can  be  preceded by white space and can be followed by white
       space.  The function can	be preceded by white space.   The  terminating
       "}"  must  be  preceded by a newline, and may also be preceded by white
       space.

       [2addr] function-list
	       Execute function-list only when the pattern space is selected.

       [1addr]a\
       text    Write text to standard output immediately before	 each  attempt
	       to  read	a line of input, whether by executing the "N" function
	       or by beginning a new cycle.

       [2addr]b[label]
	       Branch to the ":" function with the specified  label.   If  the
	       label is	not specified, branch to the end of the	script.

       [2addr]c\
       text    Delete the pattern space.  With 0 or 1 address or at the	end of
	       a 2-address range, text is written to the standard output.

       [2addr]d
	       Delete the pattern space	and start the next cycle.

       [2addr]D
	       Delete  the  initial  segment  of the pattern space through the
	       first newline character and start the next cycle.

       [2addr]g
	       Replace the contents of the pattern space with the contents  of
	       the hold	space.

       [2addr]G
	       Append a	newline	character followed by the contents of the hold
	       space to	the pattern space.

       [2addr]h
	       Replace the contents of the hold	space with the contents	of the
	       pattern space.

       [2addr]H
	       Append a	newline	character followed by the contents of the pat-
	       tern space to the hold space.

       [1addr]i\
       text    Write text to the standard output.

       [2addr]l
	       (The letter ell.)  Write	the pattern space to the standard out-
	       put in a	visually unambiguous form.  This form is as follows:

		     backslash		\\
		     alert		\a
		     form-feed		\f
		     carriage-return	\r
		     tab		\t
		     vertical tab	\v

	       Nonprintable  characters	 are written as	three-digit octal num-
	       bers (with a preceding backslash) for each byte in the  charac-
	       ter (most significant byte first).  Long	lines are folded, with
	       the  point  of folding indicated	by displaying a	backslash fol-
	       lowed by	a newline.  The	end of each line is marked with	a "$".

       [2addr]n
	       Write the pattern space to the standard output if  the  default
	       output  has  not	been suppressed, and replace the pattern space
	       with the	next line of input.

       [2addr]N
	       Append the next line of input to	the pattern  space,  using  an
	       embedded	 newline  character  to	separate the appended material
	       from the	original contents.  Note that the current line	number
	       changes.

       [2addr]p
	       Write the pattern space to standard output.

       [2addr]P
	       Write  the  pattern space, up to	the first newline character to
	       the standard output.

       [1addr]q
	       Branch to the end of the	script and quit	without	starting a new
	       cycle.

       [1addr]r	file
	       Copy the	contents of file to the	 standard  output  immediately
	       before  the next	attempt	to read	a line of input.  If file can-
	       not be read for any reason, it is silently ignored and no error
	       condition is set.

       [2addr]s/regular	expression/replacement/flags
	       Substitute the replacement string for the first instance	of the
	       regular expression in the pattern space.	 Any  character	 other
	       than backslash or newline can be	used instead of	a slash	to de-
	       limit  the  RE  and the replacement.  Within the	RE and the re-
	       placement, the RE delimiter itself can be  used	as  a  literal
	       character if it is preceded by a	backslash.

	       An  ampersand ("&") appearing in	the replacement	is replaced by
	       the string matching the RE.  The	special	meaning	of "&" in this
	       context can be suppressed by preceding it by a backslash.   The
	       string  "\#",  where  "#"  is  a	digit, is replaced by the text
	       matched by  the	corresponding  backreference  expression  (see
	       re_format(7)).

	       A  line	can  be	split by substituting a	newline	character into
	       it.  To specify a newline character in the replacement  string,
	       precede it with a backslash.

	       The  value  of flags in the substitute function is zero or more
	       of the following:

		     N	     Make the substitution only	for  the  N'th	occur-
			     rence  of	the  regular expression	in the pattern
			     space.

		     g	     Make the  substitution  for  all  non-overlapping
			     matches  of  the regular expression, not just the
			     first one.

		     p	     Write the pattern space to	standard output	 if  a
			     replacement  was made.  If	the replacement	string
			     is	identical to that which	 it  replaces,	it  is
			     still considered to have been a replacement.

		     w file  Append the	pattern	space to file if a replacement
			     was made.	If the replacement string is identical
			     to	that which it replaces,	it is still considered
			     to	have been a replacement.

		     i or I  Match  the	 regular expression in a case-insensi-
			     tive way.

       [2addr]t	[label]
	       Branch to the ":" function bearing the label if	any  substitu-
	       tions  have been	made since the most recent reading of an input
	       line or execution of a "t" function.  If	no label is specified,
	       branch to the end of the	script.

       [2addr]w	file
	       Append the pattern space	to the file.

       [2addr]x
	       Swap the	contents of the	pattern	and hold spaces.

       [2addr]y/string1/string2/
	       Replace all occurrences of characters in	string1	in the pattern
	       space with the  corresponding  characters  from	string2.   Any
	       character other than a backslash	or newline can be used instead
	       of a slash to delimit the strings.  Within string1 and string2,
	       a  backslash  followed by any character other than a newline is
	       that literal character, and a backslash followed	by an ``n'' is
	       replaced	by a newline character.

       [2addr]!function
       [2addr]!function-list
	       Apply the function or function-list only	to the lines that  are
	       not selected by the address(es).

       [0addr]:label
	       This  function  does nothing; it	bears a	label to which the "b"
	       and "t" commands	may branch.

       [1addr]=
	       Write the line number to	the standard output followed by	a new-
	       line character.

       [0addr]
	       Empty lines are ignored.

       [0addr]#
	       The "#" and the remainder of the	line are ignored (treated as a
	       comment), with the single exception that	if the first two char-
	       acters in the file are "#n", the	default	output is  suppressed.
	       This  is	 the  same  as specifying the -n option	on the command
	       line.

ENVIRONMENT
       The COLUMNS, LANG, LC_ALL, LC_CTYPE and	LC_COLLATE  environment	 vari-
       ables affect the	execution of sed as described in environ(7).

EXIT STATUS
       The sed utility exits 0 on success, and >0 if an	error occurs.

EXAMPLES
       Replace `bar' with `baz'	when piped from	another	command:

	     echo "An alternate	word, like bar,	is sometimes used in examples."	| sed 's/bar/baz/'

       Using backlashes	can sometimes be hard to read and follow:

	     echo "/home/example" | sed	 's/\/home\/example/\/usr\/local\/example/'

       Using a different separator can be handy	when working with paths:

	     echo "/home/example" | sed	's#/home/example#/usr/local/example#'

       Replace all occurrences of `foo'	with `bar' in the file test.txt, with-
       out creating a backup of	the file:

	     sed -i '' -e 's/foo/bar/g'	test.txt

SEE ALSO
       awk(1), ed(1), grep(1), regex(3), re_format(7)

       Lee  E.	McMahon,  SED  --  A  Non-interactive  Text  Editor, AT_T Bell
       Laboratories, Computing Science Technical Report, 77, January 1979.

STANDARDS
       The sed utility is expected to be a superset of	the  IEEE  Std	1003.2
       ("POSIX.2") specification.

       The -E, -I, -a and -i options, the special meaning of -f	-, the prefix-
       ing  "+"	 in  the second	member of an address range, as well as the "I"
       flag to the address regular expression  and  substitution  command  are
       non-standard FreeBSD extensions and may not be available	on other oper-
       ating systems.

HISTORY
       A  sed  command,	 written  by L.	E. McMahon, appeared in	Version	7 AT&T
       UNIX.

AUTHORS
       Diomidis	D. Spinellis <dds@FreeBSD.org>

BUGS
       Multibyte characters containing a byte with value 0x5C (ASCII `\')  may
       be  incorrectly treated as line continuation characters in arguments to
       the "a",	"c" and	"i" commands.  Multibyte characters cannot be used  as
       delimiters with the "s" and "y" commands.

FreeBSD	13.2			 April 8, 2021				SED(1)

NAME | SYNOPSIS | DESCRIPTION | Sed Addresses | Sed Regular Expressions | Sed Functions | ENVIRONMENT | EXIT STATUS | EXAMPLES | SEE ALSO | STANDARDS | HISTORY | AUTHORS | BUGS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sed&sektion=1&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help