Ignore:
Timestamp:
Sep 19, 2024, 2:34:43 AM (10 months ago)
Author:
bird
Message:

src/sed: Merged in changes between 4.1.5 and 4.9 from the vendor branch. (svn merge /vendor/sed/4.1.5 /vendor/sed/current .)

Location:
trunk/src/sed
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/sed

  • trunk/src/sed/doc/sed.info

    r599 r3613  
    1 This is ../../doc/sed.info, produced by makeinfo version 4.5 from
    2 ../../doc/sed.texi.
    3 
     1This is sed.info, produced by makeinfo version 6.8dev from sed.texi.
     2
     3This file documents version 4.9 of GNU ‘sed’, a stream editor.
     4
     5   Copyright © 1998–2022 Free Software Foundation, Inc.
     6
     7     Permission is granted to copy, distribute and/or modify this
     8     document under the terms of the GNU Free Documentation License,
     9     Version 1.3 or any later version published by the Free Software
     10     Foundation; with no Invariant Sections, no Front-Cover Texts, and
     11     no Back-Cover Texts.  A copy of the license is included in the
     12     section entitled “GNU Free Documentation License”.
    413INFO-DIR-SECTION Text creation and manipulation
    514START-INFO-DIR-ENTRY
     
    817END-INFO-DIR-ENTRY
    918
    10 This file documents version 4.1.5 of GNU `sed', a stream editor.
    11 
    12    Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004 Free Software
    13 Foundation, Inc.
    14 
    15    This document is released under the terms of the GNU Free
    16 Documentation License as published by the Free Software Foundation;
    17 either version 1.1, or (at your option) any later version.
    18 
    19    You should have received a copy of the GNU Free Documentation
    20 License along with GNU `sed'; see the file `COPYING.DOC'.  If not,
    21 write to the Free Software Foundation, 59 Temple Place - Suite 330,
    22 Boston, MA 02110-1301, USA.
    23 
    24    There are no Cover Texts and no Invariant Sections; this text, along
    25 with its equivalent in the printed manual, constitutes the Title Page.
    26 
    27 Indirect:
    28 sed.info-1: 935
    29 sed.info-2: 50405
     19
     20File: sed.info,  Node: Top,  Next: Introduction,  Up: (dir)
     21
     22GNU ‘sed’
     23*********
     24
     25This file documents version 4.9 of GNU ‘sed’, a stream editor.
     26
     27   Copyright © 1998–2022 Free Software Foundation, Inc.
     28
     29     Permission is granted to copy, distribute and/or modify this
     30     document under the terms of the GNU Free Documentation License,
     31     Version 1.3 or any later version published by the Free Software
     32     Foundation; with no Invariant Sections, no Front-Cover Texts, and
     33     no Back-Cover Texts.  A copy of the license is included in the
     34     section entitled “GNU Free Documentation License”.
     35
     36* Menu:
     37
     38* Introduction::               Introduction
     39* Invoking sed::               Invocation
     40* sed scripts::                ‘sed’ scripts
     41* sed addresses::              Addresses: selecting lines
     42* sed regular expressions::    Regular expressions: selecting text
     43* advanced sed::               Advanced ‘sed’: cycles and buffers
     44* Examples::                   Some sample scripts
     45* Limitations::                Limitations and (non-)limitations of GNU ‘sed’
     46* Other Resources::            Other resources for learning about ‘sed’
     47* Reporting Bugs::             Reporting bugs
     48* GNU Free Documentation License:: Copying and sharing this manual
     49* Concept Index::              A menu with all the topics in this manual.
     50* Command and Option Index::   A menu with all ‘sed’ commands and
     51                               command-line options.
     52
     53
     54File: sed.info,  Node: Introduction,  Next: Invoking sed,  Prev: Top,  Up: Top
     55
     561 Introduction
     57**************
     58
     59‘sed’ is a stream editor.  A stream editor is used to perform basic text
     60transformations on an input stream (a file or input from a pipeline).
     61While in some ways similar to an editor which permits scripted edits
     62(such as ‘ed’), ‘sed’ works by making only one pass over the input(s),
     63and is consequently more efficient.  But it is ‘sed’’s ability to filter
     64text in a pipeline which particularly distinguishes it from other types
     65of editors.
     66
     67
     68File: sed.info,  Node: Invoking sed,  Next: sed scripts,  Prev: Introduction,  Up: Top
     69
     702 Running sed
     71*************
     72
     73This chapter covers how to run ‘sed’.  Details of ‘sed’ scripts and
     74individual ‘sed’ commands are discussed in the next chapter.
     75
     76* Menu:
     77
     78* Overview::
     79* Command-Line Options::
     80* Exit status::
     81
     82
     83File: sed.info,  Node: Overview,  Next: Command-Line Options,  Up: Invoking sed
     84
     852.1 Overview
     86============
     87
     88Normally ‘sed’ is invoked like this:
     89
     90     sed SCRIPT INPUTFILE...
     91
     92   For example, to change every ‘hello’ to ‘world’ in the file
     93‘input.txt’:
     94
     95     sed 's/hello/world/g' input.txt > output.txt
     96
     97   Without the ‘g’ (global) modifier, ‘sed’ affects only the first
     98instance per line.
     99
     100   If you do not specify INPUTFILE, or if INPUTFILE is ‘-’, ‘sed’
     101filters the contents of the standard input.  The following commands are
     102equivalent:
     103
     104     sed 's/hello/world/g' input.txt > output.txt
     105     sed 's/hello/world/g' < input.txt > output.txt
     106     cat input.txt | sed 's/hello/world/g' - > output.txt
     107
     108   â€˜sed’ writes output to standard output.  Use ‘-i’ to edit files
     109in-place instead of printing to standard output.  See also the ‘W’ and
     110‘s///w’ commands for writing output to other files.  The following
     111command modifies ‘file.txt’ and does not produce any output:
     112
     113     sed -i 's/hello/world/' file.txt
     114
     115   By default ‘sed’ prints all processed input (except input that has
     116been modified/deleted by commands such as ‘d’).  Use ‘-n’ to suppress
     117output, and the ‘p’ command to print specific lines.  The following
     118command prints only line 45 of the input file:
     119
     120     sed -n '45p' file.txt
     121
     122   â€˜sed’ treats multiple input files as one long stream.  The following
     123example prints the first line of the first file (‘one.txt’) and the last
     124line of the last file (‘three.txt’).  Use ‘-s’ to reverse this behavior.
     125
     126     sed -n  '1p ; $p' one.txt two.txt three.txt
     127
     128   Without ‘-e’ or ‘-f’ options, ‘sed’ uses the first non-option
     129parameter as the SCRIPT, and the following non-option parameters as
     130input files.  If ‘-e’ or ‘-f’ options are used to specify a SCRIPT, all
     131non-option parameters are taken as input files.  Options ‘-e’ and ‘-f’
     132can be combined, and can appear multiple times (in which case the final
     133effective SCRIPT will be concatenation of all the individual SCRIPTs).
     134
     135   The following examples are equivalent:
     136
     137     sed 's/hello/world/' input.txt > output.txt
     138
     139     sed -e 's/hello/world/' input.txt > output.txt
     140     sed --expression='s/hello/world/' input.txt > output.txt
     141
     142     echo 's/hello/world/' > myscript.sed
     143     sed -f myscript.sed input.txt > output.txt
     144     sed --file=myscript.sed input.txt > output.txt
     145
     146
     147File: sed.info,  Node: Command-Line Options,  Next: Exit status,  Prev: Overview,  Up: Invoking sed
     148
     1492.2 Command-Line Options
     150========================
     151
     152The full format for invoking ‘sed’ is:
     153
     154     sed OPTIONS... [SCRIPT] [INPUTFILE...]
     155
     156   â€˜sed’ may be invoked with the following command-line options:
     157
     158‘--version’
     159     Print out the version of ‘sed’ that is being run and a copyright
     160     notice, then exit.
     161
     162‘--help’
     163     Print a usage message briefly summarizing these command-line
     164     options and the bug-reporting address, then exit.
     165
     166‘-n’
     167‘--quiet’
     168‘--silent’
     169     By default, ‘sed’ prints out the pattern space at the end of each
     170     cycle through the script (*note How ‘sed’ works: Execution Cycle.).
     171     These options disable this automatic printing, and ‘sed’ only
     172     produces output when explicitly told to via the ‘p’ command.
     173
     174‘--debug’
     175     Print the input sed program in canonical form, and annotate program
     176     execution.
     177          $ echo 1 | sed '\%1%s21232'
     178          3
     179
     180          $ echo 1 | sed --debug '\%1%s21232'
     181          SED PROGRAM:
     182            /1/ s/1/3/
     183          INPUT:   'STDIN' line 1
     184          PATTERN: 1
     185          COMMAND: /1/ s/1/3/
     186          PATTERN: 3
     187          END-OF-CYCLE:
     188          3
     189
     190‘-e SCRIPT’
     191‘--expression=SCRIPT’
     192     Add the commands in SCRIPT to the set of commands to be run while
     193     processing the input.
     194
     195‘-f SCRIPT-FILE’
     196‘--file=SCRIPT-FILE’
     197     Add the commands contained in the file SCRIPT-FILE to the set of
     198     commands to be run while processing the input.
     199
     200‘-i[SUFFIX]’
     201‘--in-place[=SUFFIX]’
     202     This option specifies that files are to be edited in-place.  GNU
     203     â€˜sed’ does this by creating a temporary file and sending output to
     204     this file rather than to the standard output.(1).
     205
     206     This option implies ‘-s’.
     207
     208     When the end of the file is reached, the temporary file is renamed
     209     to the output file’s original name.  The extension, if supplied, is
     210     used to modify the name of the old file before renaming the
     211     temporary file, thereby making a backup copy(2)).
     212
     213     This rule is followed: if the extension doesn’t contain a ‘*’, then
     214     it is appended to the end of the current filename as a suffix; if
     215     the extension does contain one or more ‘*’ characters, then _each_
     216     asterisk is replaced with the current filename.  This allows you to
     217     add a prefix to the backup file, instead of (or in addition to) a
     218     suffix, or even to place backup copies of the original files into
     219     another directory (provided the directory already exists).
     220
     221     If no extension is supplied, the original file is overwritten
     222     without making a backup.
     223
     224     Because ‘-i’ takes an optional argument, it should not be followed
     225     by other short options:
     226     â€˜sed -Ei '...' FILE’
     227          Same as ‘-E -i’ with no backup suffix - ‘FILE’ will be edited
     228          in-place without creating a backup.
     229
     230     â€˜sed -iE '...' FILE’
     231          This is equivalent to ‘--in-place=E’, creating ‘FILEE’ as
     232          backup of ‘FILE’
     233
     234     Be cautious of using ‘-n’ with ‘-i’: the former disables automatic
     235     printing of lines and the latter changes the file in-place without
     236     a backup.  Used carelessly (and without an explicit ‘p’ command),
     237     the output file will be empty:
     238          # WRONG USAGE: 'FILE' will be truncated.
     239          sed -ni 's/foo/bar/' FILE
     240
     241‘-l N’
     242‘--line-length=N’
     243     Specify the default line-wrap length for the ‘l’ command.  A length
     244     of 0 (zero) means to never wrap long lines.  If not specified, it
     245     is taken to be 70.
     246
     247‘--posix’
     248     GNU ‘sed’ includes several extensions to POSIX sed.  In order to
     249     simplify writing portable scripts, this option disables all the
     250     extensions that this manual documents, including additional
     251     commands.  Most of the extensions accept ‘sed’ programs that are
     252     outside the syntax mandated by POSIX, but some of them (such as the
     253     behavior of the ‘N’ command described in *note Reporting Bugs::)
     254     actually violate the standard.  If you want to disable only the
     255     latter kind of extension, you can set the ‘POSIXLY_CORRECT’
     256     variable to a non-empty value.
     257
     258‘-b’
     259‘--binary’
     260     This option is available on every platform, but is only effective
     261     where the operating system makes a distinction between text files
     262     and binary files.  When such a distinction is made—as is the case
     263     for MS-DOS, Windows, Cygwin—text files are composed of lines
     264     separated by a carriage return _and_ a line feed character, and
     265     â€˜sed’ does not see the ending CR. When this option is specified,
     266     â€˜sed’ will open input files in binary mode, thus not requesting
     267     this special processing and considering lines to end at a line
     268     feed.
     269
     270‘--follow-symlinks’
     271     This option is available only on platforms that support symbolic
     272     links and has an effect only if option ‘-i’ is specified.  In this
     273     case, if the file that is specified on the command line is a
     274     symbolic link, ‘sed’ will follow the link and edit the ultimate
     275     destination of the link.  The default behavior is to break the
     276     symbolic link, so that the link destination will not be modified.
     277
     278‘-E’
     279‘-r’
     280‘--regexp-extended’
     281     Use extended regular expressions rather than basic regular
     282     expressions.  Extended regexps are those that ‘egrep’ accepts; they
     283     can be clearer because they usually have fewer backslashes.
     284     Historically this was a GNU extension, but the ‘-E’ extension has
     285     since been added to the POSIX standard
     286     (http://austingroupbugs.net/view.php?id=528), so use ‘-E’ for
     287     portability.  GNU sed has accepted ‘-E’ as an undocumented option
     288     for years, and *BSD seds have accepted ‘-E’ for years as well, but
     289     scripts that use ‘-E’ might not port to other older systems.  *Note
     290     Extended regular expressions: ERE syntax.
     291
     292‘-s’
     293‘--separate’
     294     By default, ‘sed’ will consider the files specified on the command
     295     line as a single continuous long stream.  This GNU ‘sed’ extension
     296     allows the user to consider them as separate files: range addresses
     297     (such as ‘/abc/,/def/’) are not allowed to span several files, line
     298     numbers are relative to the start of each file, ‘$’ refers to the
     299     last line of each file, and files invoked from the ‘R’ commands are
     300     rewound at the start of each file.
     301
     302‘--sandbox’
     303     In sandbox mode, ‘e/w/r’ commands are rejected - programs
     304     containing them will be aborted without being run.  Sandbox mode
     305     ensures ‘sed’ operates only on the input files designated on the
     306     command line, and cannot run external programs.
     307
     308‘-u’
     309‘--unbuffered’
     310     Buffer both input and output as minimally as practical.  (This is
     311     particularly useful if the input is coming from the likes of ‘tail
     312     -f’, and you wish to see the transformed output as soon as
     313     possible.)
     314
     315‘-z’
     316‘--null-data’
     317‘--zero-terminated’
     318     Treat the input as a set of lines, each terminated by a zero byte
     319     (the ASCII ‘NUL’ character) instead of a newline.  This option can
     320     be used with commands like ‘sort -z’ and ‘find -print0’ to process
     321     arbitrary file names.
     322
     323   If no ‘-e’, ‘-f’, ‘--expression’, or ‘--file’ options are given on
     324the command-line, then the first non-option argument on the command line
     325is taken to be the SCRIPT to be executed.
     326
     327   If any command-line parameters remain after processing the above,
     328these parameters are interpreted as the names of input files to be
     329processed.  A file name of ‘-’ refers to the standard input stream.  The
     330standard input will be processed if no file names are specified.
     331
     332   ---------- Footnotes ----------
     333
     334   (1) This applies to commands such as ‘=’, ‘a’, ‘c’, ‘i’, ‘l’, ‘p’.
     335You can still write to the standard output by using the ‘w’ or ‘W’
     336commands together with the ‘/dev/stdout’ special file
     337
     338   (2) Note that GNU ‘sed’ creates the backup file whether or not any
     339output is actually changed.
     340
     341
     342File: sed.info,  Node: Exit status,  Prev: Command-Line Options,  Up: Invoking sed
     343
     3442.3 Exit status
     345===============
     346
     347An exit status of zero indicates success, and a nonzero value indicates
     348failure.  GNU ‘sed’ returns the following exit status error values:
     349
     3500
     351     Successful completion.
     352
     3531
     354     Invalid command, invalid syntax, invalid regular expression or a
     355     GNU ‘sed’ extension command used with ‘--posix’.
     356
     3572
     358     One or more of the input file specified on the command line could
     359     not be opened (e.g.  if a file is not found, or read permission is
     360     denied).  Processing continued with other files.
     361
     3624
     363     An I/O error, or a serious processing error during runtime, GNU
     364     â€˜sed’ aborted immediately.
     365
     366   Additionally, the commands ‘q’ and ‘Q’ can be used to terminate ‘sed’
     367with a custom exit code value (this is a GNU ‘sed’ extension):
     368
     369     $ echo | sed 'Q42' ; echo $?
     370     42
     371
     372
     373File: sed.info,  Node: sed scripts,  Next: sed addresses,  Prev: Invoking sed,  Up: Top
     374
     3753 ‘sed’ scripts
     376***************
     377
     378* Menu:
     379
     380* sed script overview::      ‘sed’ script overview
     381* sed commands list::        ‘sed’ commands summary
     382* The "s" Command::          ‘sed’’s Swiss Army Knife
     383* Common Commands::          Often used commands
     384* Other Commands::           Less frequently used commands
     385* Programming Commands::     Commands for ‘sed’ gurus
     386* Extended Commands::        Commands specific of GNU ‘sed’
     387* Multiple commands syntax:: Extension for easier scripting
     388
     389
     390File: sed.info,  Node: sed script overview,  Next: sed commands list,  Up: sed scripts
     391
     3923.1 ‘sed’ script overview
     393=========================
     394
     395A ‘sed’ program consists of one or more ‘sed’ commands, passed in by one
     396or more of the ‘-e’, ‘-f’, ‘--expression’, and ‘--file’ options, or the
     397first non-option argument if zero of these options are used.  This
     398document will refer to “the” ‘sed’ script; this is understood to mean
     399the in-order concatenation of all of the SCRIPTs and SCRIPT-FILEs passed
     400in.  *Note Overview::.
     401
     402   â€˜sed’ commands follow this syntax:
     403
     404     [addr]X[options]
     405
     406   X is a single-letter ‘sed’ command.  ‘[addr]’ is an optional line
     407address.  If ‘[addr]’ is specified, the command X will be executed only
     408on the matched lines.  ‘[addr]’ can be a single line number, a regular
     409expression, or a range of lines (*note sed addresses::).  Additional
     410‘[options]’ are used for some ‘sed’ commands.
     411
     412   The following example deletes lines 30 to 35 in the input.  ‘30,35’
     413is an address range.  ‘d’ is the delete command:
     414
     415     sed '30,35d' input.txt > output.txt
     416
     417   The following example prints all input until a line starting with the
     418string ‘foo’ is found.  If such line is found, ‘sed’ will terminate with
     419exit status 42.  If such line was not found (and no other error
     420occurred), ‘sed’ will exit with status 0.  ‘/^foo/’ is a
     421regular-expression address.  ‘q’ is the quit command.  ‘42’ is the
     422command option.
     423
     424     sed '/^foo/q42' input.txt > output.txt
     425
     426   Commands within a SCRIPT or SCRIPT-FILE can be separated by
     427semicolons (‘;’) or newlines (ASCII 10).  Multiple scripts can be
     428specified with ‘-e’ or ‘-f’ options.
     429
     430   The following examples are all equivalent.  They perform two ‘sed’
     431operations: deleting any lines matching the regular expression ‘/^foo/’,
     432and replacing all occurrences of the string ‘hello’ with ‘world’:
     433
     434     sed '/^foo/d ; s/hello/world/g' input.txt > output.txt
     435
     436     sed -e '/^foo/d' -e 's/hello/world/g' input.txt > output.txt
     437
     438     echo '/^foo/d' > script.sed
     439     echo 's/hello/world/g' >> script.sed
     440     sed -f script.sed input.txt > output.txt
     441
     442     echo 's/hello/world/g' > script2.sed
     443     sed -e '/^foo/d' -f script2.sed input.txt > output.txt
     444
     445   Commands ‘a’, ‘c’, ‘i’, due to their syntax, cannot be followed by
     446semicolons working as command separators and thus should be terminated
     447with newlines or be placed at the end of a SCRIPT or SCRIPT-FILE.
     448Commands can also be preceded with optional non-significant whitespace
     449characters.  *Note Multiple commands syntax::.
     450
     451
     452File: sed.info,  Node: sed commands list,  Next: The "s" Command,  Prev: sed script overview,  Up: sed scripts
     453
     4543.2 ‘sed’ commands summary
     455==========================
     456
     457The following commands are supported in GNU ‘sed’.  Some are standard
     458POSIX commands, while other are GNU extensions.  Details and examples
     459for each command are in the following sections.  (Mnemonics) are shown
     460in parentheses.
     461
     462‘a\’
     463‘TEXT’
     464     Append TEXT after a line.
     465
     466‘a TEXT’
     467     Append TEXT after a line (alternative syntax).
     468
     469‘b LABEL’
     470     Branch unconditionally to LABEL.  The LABEL may be omitted, in
     471     which case the next cycle is started.
     472
     473‘c\’
     474‘TEXT’
     475     Replace (change) lines with TEXT.
     476
     477‘c TEXT’
     478     Replace (change) lines with TEXT (alternative syntax).
     479
     480‘d’
     481     Delete the pattern space; immediately start next cycle.
     482
     483‘D’
     484     If pattern space contains newlines, delete text in the pattern
     485     space up to the first newline, and restart cycle with the resultant
     486     pattern space, without reading a new line of input.
     487
     488     If pattern space contains no newline, start a normal new cycle as
     489     if the ‘d’ command was issued.
     490
     491‘e’
     492     Executes the command that is found in pattern space and replaces
     493     the pattern space with the output; a trailing newline is
     494     suppressed.
     495
     496‘e COMMAND’
     497     Executes COMMAND and sends its output to the output stream.  The
     498     command can run across multiple lines, all but the last ending with
     499     a back-slash.
     500
     501‘F’
     502     (filename) Print the file name of the current input file (with a
     503     trailing newline).
     504
     505‘g’
     506     Replace the contents of the pattern space with the contents of the
     507     hold space.
     508
     509‘G’
     510     Append a newline to the contents of the pattern space, and then
     511     append the contents of the hold space to that of the pattern space.
     512
     513‘h’
     514     (hold) Replace the contents of the hold space with the contents of
     515     the pattern space.
     516
     517‘H’
     518     Append a newline to the contents of the hold space, and then append
     519     the contents of the pattern space to that of the hold space.
     520
     521‘i\’
     522‘TEXT’
     523     insert TEXT before a line.
     524
     525‘i TEXT’
     526     insert TEXT before a line (alternative syntax).
     527
     528‘l’
     529     Print the pattern space in an unambiguous form.
     530
     531‘n’
     532     (next) If auto-print is not disabled, print the pattern space,
     533     then, regardless, replace the pattern space with the next line of
     534     input.  If there is no more input then ‘sed’ exits without
     535     processing any more commands.
     536
     537‘N’
     538     Add a newline to the pattern space, then append the next line of
     539     input to the pattern space.  If there is no more input then ‘sed’
     540     exits without processing any more commands.
     541
     542‘p’
     543     Print the pattern space.
     544
     545‘P’
     546     Print the pattern space, up to the first <newline>.
     547
     548‘q[EXIT-CODE]’
     549     (quit) Exit ‘sed’ without processing any more commands or input.
     550
     551‘Q[EXIT-CODE]’
     552     (quit) This command is the same as ‘q’, but will not print the
     553     contents of pattern space.  Like ‘q’, it provides the ability to
     554     return an exit code to the caller.
     555
     556‘r filename’
     557     Reads file FILENAME.
     558
     559‘R filename’
     560     Queue a line of FILENAME to be read and inserted into the output
     561     stream at the end of the current cycle, or when the next input line
     562     is read.
     563
     564‘s/REGEXP/REPLACEMENT/[FLAGS]’
     565     (substitute) Match the regular-expression against the content of
     566     the pattern space.  If found, replace matched string with
     567     REPLACEMENT.
     568
     569‘t LABEL’
     570     (test) Branch to LABEL only if there has been a successful
     571     â€˜s’ubstitution since the last input line was read or conditional
     572     branch was taken.  The LABEL may be omitted, in which case the next
     573     cycle is started.
     574
     575‘T LABEL’
     576     (test) Branch to LABEL only if there have been no successful
     577     â€˜s’ubstitutions since the last input line was read or conditional
     578     branch was taken.  The LABEL may be omitted, in which case the next
     579     cycle is started.
     580
     581‘v [VERSION]’
     582     (version) This command does nothing, but makes ‘sed’ fail if GNU
     583     â€˜sed’ extensions are not supported, or if the requested version is
     584     not available.
     585
     586‘w filename’
     587     Write the pattern space to FILENAME.
     588
     589‘W filename’
     590     Write to the given filename the portion of the pattern space up to
     591     the first newline
     592
     593‘x’
     594     Exchange the contents of the hold and pattern spaces.
     595
     596‘y/src/dst/’
     597     Transliterate any characters in the pattern space which match any
     598     of the SOURCE-CHARS with the corresponding character in DEST-CHARS.
     599
     600‘z’
     601     (zap) This command empties the content of pattern space.
     602
     603‘#’
     604     A comment, until the next newline.
     605
     606‘{ CMD ; CMD ... }’
     607     Group several commands together.
     608
     609‘=’
     610     Print the current input line number (with a trailing newline).
     611
     612‘: LABEL’
     613     Specify the location of LABEL for branch commands (‘b’, ‘t’, ‘T’).
     614
     615
     616File: sed.info,  Node: The "s" Command,  Next: Common Commands,  Prev: sed commands list,  Up: sed scripts
     617
     6183.3 The ‘s’ Command
     619===================
     620
     621The ‘s’ command (as in substitute) is probably the most important in
     622‘sed’ and has a lot of different options.  The syntax of the ‘s’ command
     623is ‘s/REGEXP/REPLACEMENT/FLAGS’.
     624
     625   Its basic concept is simple: the ‘s’ command attempts to match the
     626pattern space against the supplied regular expression REGEXP; if the
     627match is successful, then that portion of the pattern space which was
     628matched is replaced with REPLACEMENT.
     629
     630   For details about REGEXP syntax *note Regular Expression Addresses:
     631Regexp Addresses.
     632
     633   The REPLACEMENT can contain ‘\N’ (N being a number from 1 to 9,
     634inclusive) references, which refer to the portion of the match which is
     635contained between the Nth ‘\(’ and its matching ‘\)’.  Also, the
     636REPLACEMENT can contain unescaped ‘&’ characters which reference the
     637whole matched portion of the pattern space.
     638
     639   The ‘/’ characters may be uniformly replaced by any other single
     640character within any given ‘s’ command.  The ‘/’ character (or whatever
     641other character is used in its stead) can appear in the REGEXP or
     642REPLACEMENT only if it is preceded by a ‘\’ character.
     643
     644   Finally, as a GNU ‘sed’ extension, you can include a special sequence
     645made of a backslash and one of the letters ‘L’, ‘l’, ‘U’, ‘u’, or ‘E’.
     646The meaning is as follows:
     647
     648‘\L’
     649     Turn the replacement to lowercase until a ‘\U’ or ‘\E’ is found,
     650
     651‘\l’
     652     Turn the next character to lowercase,
     653
     654‘\U’
     655     Turn the replacement to uppercase until a ‘\L’ or ‘\E’ is found,
     656
     657‘\u’
     658     Turn the next character to uppercase,
     659
     660‘\E’
     661     Stop case conversion started by ‘\L’ or ‘\U’.
     662
     663   When the ‘g’ flag is being used, case conversion does not propagate
     664from one occurrence of the regular expression to another.  For example,
     665when the following command is executed with ‘a-b-’ in pattern space:
     666     s/\(b\?\)-/x\u\1/g
     667
     668the output is ‘axxB’.  When replacing the first ‘-’, the ‘\u’ sequence
     669only affects the empty replacement of ‘\1’.  It does not affect the ‘x’
     670character that is added to pattern space when replacing ‘b-’ with ‘xB’.
     671
     672   On the other hand, ‘\l’ and ‘\u’ do affect the remainder of the
     673replacement text if they are followed by an empty substitution.  With
     674‘a-b-’ in pattern space, the following command:
     675     s/\(b\?\)-/\u\1x/g
     676
     677will replace ‘-’ with ‘X’ (uppercase) and ‘b-’ with ‘Bx’.  If this
     678behavior is undesirable, you can prevent it by adding a ‘\E’
     679sequence—after ‘\1’ in this case.
     680
     681   To include a literal ‘\’, ‘&’, or newline in the final replacement,
     682be sure to precede the desired ‘\’, ‘&’, or newline in the REPLACEMENT
     683with a ‘\’.
     684
     685   The ‘s’ command can be followed by zero or more of the following
     686FLAGS:
     687
     688‘g’
     689     Apply the replacement to _all_ matches to the REGEXP, not just the
     690     first.
     691
     692‘NUMBER’
     693     Only replace the NUMBERth match of the REGEXP.
     694
     695     interaction in ‘s’ command Note: the POSIX standard does not
     696     specify what should happen when you mix the ‘g’ and NUMBER
     697     modifiers, and currently there is no widely agreed upon meaning
     698     across ‘sed’ implementations.  For GNU ‘sed’, the interaction is
     699     defined to be: ignore matches before the NUMBERth, and then match
     700     and replace all matches from the NUMBERth on.
     701
     702‘p’
     703     If the substitution was made, then print the new pattern space.
     704
     705     Note: when both the ‘p’ and ‘e’ options are specified, the relative
     706     ordering of the two produces very different results.  In general,
     707     â€˜ep’ (evaluate then print) is what you want, but operating the
     708     other way round can be useful for debugging.  For this reason, the
     709     current version of GNU ‘sed’ interprets specially the presence of
     710     â€˜p’ options both before and after ‘e’, printing the pattern space
     711     before and after evaluation, while in general flags for the ‘s’
     712     command show their effect just once.  This behavior, although
     713     documented, might change in future versions.
     714
     715‘w FILENAME’
     716     If the substitution was made, then write out the result to the
     717     named file.  As a GNU ‘sed’ extension, two special values of
     718     FILENAME are supported: ‘/dev/stderr’, which writes the result to
     719     the standard error, and ‘/dev/stdout’, which writes to the standard
     720     output.(1)
     721
     722‘e’
     723     This command allows one to pipe input from a shell command into
     724     pattern space.  If a substitution was made, the command that is
     725     found in pattern space is executed and pattern space is replaced
     726     with its output.  A trailing newline is suppressed; results are
     727     undefined if the command to be executed contains a NUL character.
     728     This is a GNU ‘sed’ extension.
     729
     730‘I’
     731‘i’
     732     The ‘I’ modifier to regular-expression matching is a GNU extension
     733     which makes ‘sed’ match REGEXP in a case-insensitive manner.
     734
     735‘M’
     736‘m’
     737     The ‘M’ modifier to regular-expression matching is a GNU ‘sed’
     738     extension which directs GNU ‘sed’ to match the regular expression
     739     in ‘multi-line’ mode.  The modifier causes ‘^’ and ‘$’ to match
     740     respectively (in addition to the normal behavior) the empty string
     741     after a newline, and the empty string before a newline.  There are
     742     special character sequences (‘\`’ and ‘\'’) which always match the
     743     beginning or the end of the buffer.  In addition, the period
     744     character does not match a new-line character in multi-line mode.
     745
     746   ---------- Footnotes ----------
     747
     748   (1) This is equivalent to ‘p’ unless the ‘-i’ option is being used.
     749
     750
     751File: sed.info,  Node: Common Commands,  Next: Other Commands,  Prev: The "s" Command,  Up: sed scripts
     752
     7533.4 Often-Used Commands
     754=======================
     755
     756If you use ‘sed’ at all, you will quite likely want to know these
     757commands.
     758
     759‘#’
     760     [No addresses allowed.]
     761
     762     The ‘#’ character begins a comment; the comment continues until the
     763     next newline.
     764
     765     If you are concerned about portability, be aware that some
     766     implementations of ‘sed’ (which are not POSIX conforming) may only
     767     support a single one-line comment, and then only when the very
     768     first character of the script is a ‘#’.
     769
     770     Warning: if the first two characters of the ‘sed’ script are ‘#n’,
     771     then the ‘-n’ (no-autoprint) option is forced.  If you want to put
     772     a comment in the first line of your script and that comment begins
     773     with the letter ‘n’ and you do not want this behavior, then be sure
     774     to either use a capital ‘N’, or place at least one space before the
     775     â€˜n’.
     776
     777‘q [EXIT-CODE]’
     778     Exit ‘sed’ without processing any more commands or input.
     779
     780     Example: stop after printing the second line:
     781          $ seq 3 | sed 2q
     782          1
     783          2
     784
     785     This command accepts only one address.  Note that the current
     786     pattern space is printed if auto-print is not disabled with the
     787     â€˜-n’ options.  The ability to return an exit code from the ‘sed’
     788     script is a GNU ‘sed’ extension.
     789
     790     See also the GNU ‘sed’ extension ‘Q’ command which quits silently
     791     without printing the current pattern space.
     792
     793‘d’
     794     Delete the pattern space; immediately start next cycle.
     795
     796     Example: delete the second input line:
     797          $ seq 3 | sed 2d
     798          1
     799          3
     800
     801‘p’
     802     Print out the pattern space (to the standard output).  This command
     803     is usually only used in conjunction with the ‘-n’ command-line
     804     option.
     805
     806     Example: print only the second input line:
     807          $ seq 3 | sed -n 2p
     808          2
     809
     810‘n’
     811     If auto-print is not disabled, print the pattern space, then,
     812     regardless, replace the pattern space with the next line of input.
     813     If there is no more input then ‘sed’ exits without processing any
     814     more commands.
     815
     816     This command is useful to skip lines (e.g.  process every Nth
     817     line).
     818
     819     Example: perform substitution on every 3rd line (i.e.  two ‘n’
     820     commands skip two lines):
     821          $ seq 6 | sed 'n;n;s/./x/'
     822          1
     823          2
     824          x
     825          4
     826          5
     827          x
     828
     829     GNU ‘sed’ provides an extension address syntax of FIRST~STEP to
     830     achieve the same result:
     831
     832          $ seq 6 | sed '0~3s/./x/'
     833          1
     834          2
     835          x
     836          4
     837          5
     838          x
     839
     840‘{ COMMANDS }’
     841     A group of commands may be enclosed between ‘{’ and ‘}’ characters.
     842     This is particularly useful when you want a group of commands to be
     843     triggered by a single address (or address-range) match.
     844
     845     Example: perform substitution then print the second input line:
     846          $ seq 3 | sed -n '2{s/2/X/ ; p}'
     847          X
     848
     849
     850File: sed.info,  Node: Other Commands,  Next: Programming Commands,  Prev: Common Commands,  Up: sed scripts
     851
     8523.5 Less Frequently-Used Commands
     853=================================
     854
     855Though perhaps less frequently used than those in the previous section,
     856some very small yet useful ‘sed’ scripts can be built with these
     857commands.
     858
     859‘y/SOURCE-CHARS/DEST-CHARS/’
     860     Transliterate any characters in the pattern space which match any
     861     of the SOURCE-CHARS with the corresponding character in DEST-CHARS.
     862
     863     Example: transliterate ‘a-j’ into ‘0-9’:
     864          $ echo hello world | sed 'y/abcdefghij/0123456789/'
     865          74llo worl3
     866
     867     (The ‘/’ characters may be uniformly replaced by any other single
     868     character within any given ‘y’ command.)
     869
     870     Instances of the ‘/’ (or whatever other character is used in its
     871     stead), ‘\’, or newlines can appear in the SOURCE-CHARS or
     872     DEST-CHARS lists, provide that each instance is escaped by a ‘\’.
     873     The SOURCE-CHARS and DEST-CHARS lists _must_ contain the same
     874     number of characters (after de-escaping).
     875
     876     See the ‘tr’ command from GNU coreutils for similar functionality.
     877
     878‘a TEXT’
     879     Appending TEXT after a line.  This is a GNU extension to the
     880     standard ‘a’ command - see below for details.
     881
     882     Example: Add ‘hello’ after the second line:
     883          $ seq 3 | sed '2a hello'
     884          1
     885          2
     886          hello
     887          3
     888
     889     Leading whitespace after the ‘a’ command is ignored.  The text to
     890     add is read until the end of the line.
     891
     892‘a\’
     893‘TEXT’
     894     Appending TEXT after a line.
     895
     896     Example: Add ‘hello’ after the second line (⊣ indicates printed
     897     output lines):
     898          $ seq 3 | sed '2a\
     899          hello'
     900          ⊣1
     901          ⊣2
     902          ⊣hello
     903          ⊣3
     904
     905     The ‘a’ command queues the lines of text which follow this command
     906     (each but the last ending with a ‘\’, which are removed from the
     907     output) to be output at the end of the current cycle, or when the
     908     next input line is read.
     909
     910     As a GNU extension, this command accepts two addresses.
     911
     912     Escape sequences in TEXT are processed, so you should use ‘\\’ in
     913     TEXT to print a single backslash.
     914
     915     The commands resume after the last line without a backslash (‘\’) -
     916     â€˜world’ in the following example:
     917          $ seq 3 | sed '2a\
     918          hello\
     919          world
     920          3s/./X/'
     921          ⊣1
     922          ⊣2
     923          ⊣hello
     924          ⊣world
     925          ⊣X
     926
     927     As a GNU extension, the ‘a’ command and TEXT can be separated into
     928     two ‘-e’ parameters, enabling easier scripting:
     929          $ seq 3 | sed -e '2a\' -e hello
     930          1
     931          2
     932          hello
     933          3
     934
     935          $ sed -e '2a\' -e "$VAR"
     936
     937‘i TEXT’
     938     insert TEXT before a line.  This is a GNU extension to the standard
     939     â€˜i’ command - see below for details.
     940
     941     Example: Insert ‘hello’ before the second line:
     942          $ seq 3 | sed '2i hello'
     943          1
     944          hello
     945          2
     946          3
     947
     948     Leading whitespace after the ‘i’ command is ignored.  The text to
     949     add is read until the end of the line.
     950
     951‘i\’
     952‘TEXT’
     953     Immediately output the lines of text which follow this command.
     954
     955     Example: Insert ‘hello’ before the second line (⊣ indicates printed
     956     output lines):
     957          $ seq 3 | sed '2i\
     958          hello'
     959          ⊣1
     960          ⊣hello
     961          ⊣2
     962          ⊣3
     963
     964     As a GNU extension, this command accepts two addresses.
     965
     966     Escape sequences in TEXT are processed, so you should use ‘\\’ in
     967     TEXT to print a single backslash.
     968
     969     The commands resume after the last line without a backslash (‘\’) -
     970     â€˜world’ in the following example:
     971          $ seq 3 | sed '2i\
     972          hello\
     973          world
     974          s/./X/'
     975          ⊣X
     976          ⊣hello
     977          ⊣world
     978          ⊣X
     979          ⊣X
     980
     981     As a GNU extension, the ‘i’ command and TEXT can be separated into
     982     two ‘-e’ parameters, enabling easier scripting:
     983          $ seq 3 | sed -e '2i\' -e hello
     984          1
     985          hello
     986          2
     987          3
     988
     989          $ sed -e '2i\' -e "$VAR"
     990
     991‘c TEXT’
     992     Replaces the line(s) with TEXT.  This is a GNU extension to the
     993     standard ‘c’ command - see below for details.
     994
     995     Example: Replace the 2nd to 9th lines with the word ‘hello’:
     996          $ seq 10 | sed '2,9c hello'
     997          1
     998          hello
     999          10
     1000
     1001     Leading whitespace after the ‘c’ command is ignored.  The text to
     1002     add is read until the end of the line.
     1003
     1004‘c\’
     1005‘TEXT’
     1006     Delete the lines matching the address or address-range, and output
     1007     the lines of text which follow this command.
     1008
     1009     Example: Replace 2nd to 4th lines with the words ‘hello’ and
     1010     â€˜world’ (⊣ indicates printed output lines):
     1011          $ seq 5 | sed '2,4c\
     1012          hello\
     1013          world'
     1014          ⊣1
     1015          ⊣hello
     1016          ⊣world
     1017          ⊣5
     1018
     1019     If no addresses are given, each line is replaced.
     1020
     1021     A new cycle is started after this command is done, since the
     1022     pattern space will have been deleted.  In the following example,
     1023     the ‘c’ starts a new cycle and the substitution command is not
     1024     performed on the replaced text:
     1025
     1026          $ seq 3 | sed '2c\
     1027          hello
     1028          s/./X/'
     1029          ⊣X
     1030          ⊣hello
     1031          ⊣X
     1032
     1033     As a GNU extension, the ‘c’ command and TEXT can be separated into
     1034     two ‘-e’ parameters, enabling easier scripting:
     1035          $ seq 3 | sed -e '2c\' -e hello
     1036          1
     1037          hello
     1038          3
     1039
     1040          $ sed -e '2c\' -e "$VAR"
     1041
     1042‘=’
     1043     Print out the current input line number (with a trailing newline).
     1044
     1045          $ printf '%s\n' aaa bbb ccc | sed =
     1046          1
     1047          aaa
     1048          2
     1049          bbb
     1050          3
     1051          ccc
     1052
     1053     As a GNU extension, this command accepts two addresses.
     1054
     1055‘l N’
     1056     Print the pattern space in an unambiguous form: non-printable
     1057     characters (and the ‘\’ character) are printed in C-style escaped
     1058     form; long lines are split, with a trailing ‘\’ character to
     1059     indicate the split; the end of each line is marked with a ‘$’.
     1060
     1061     N specifies the desired line-wrap length; a length of 0 (zero)
     1062     means to never wrap long lines.  If omitted, the default as
     1063     specified on the command line is used.  The N parameter is a GNU
     1064     â€˜sed’ extension.
     1065
     1066‘r FILENAME’
     1067
     1068     Reads file FILENAME.  Example:
     1069
     1070          $ seq 3 | sed '2r/etc/hostname'
     1071          1
     1072          2
     1073          fencepost.gnu.org
     1074          3
     1075
     1076     Queue the contents of FILENAME to be read and inserted into the
     1077     output stream at the end of the current cycle, or when the next
     1078     input line is read.  Note that if FILENAME cannot be read, it is
     1079     treated as if it were an empty file, without any error indication.
     1080
     1081     As a GNU ‘sed’ extension, the special value ‘/dev/stdin’ is
     1082     supported for the file name, which reads the contents of the
     1083     standard input.
     1084
     1085     As a GNU extension, this command accepts two addresses.  The file
     1086     will then be reread and inserted on each of the addressed lines.
     1087
     1088     As a GNU ‘sed’ extension, the ‘r’ command accepts a zero address,
     1089     inserting a file _before_ the first line of the input *note Adding
     1090     a header to multiple files::.
     1091
     1092‘w FILENAME’
     1093     Write the pattern space to FILENAME.  As a GNU ‘sed’ extension, two
     1094     special values of FILENAME are supported: ‘/dev/stderr’, which
     1095     writes the result to the standard error, and ‘/dev/stdout’, which
     1096     writes to the standard output.(1)
     1097
     1098     The file will be created (or truncated) before the first input line
     1099     is read; all ‘w’ commands (including instances of the ‘w’ flag on
     1100     successful ‘s’ commands) which refer to the same FILENAME are
     1101     output without closing and reopening the file.
     1102
     1103‘D’
     1104     If pattern space contains no newline, start a normal new cycle as
     1105     if the ‘d’ command was issued.  Otherwise, delete text in the
     1106     pattern space up to the first newline, and restart cycle with the
     1107     resultant pattern space, without reading a new line of input.
     1108
     1109‘N’
     1110     Add a newline to the pattern space, then append the next line of
     1111     input to the pattern space.  If there is no more input then ‘sed’
     1112     exits without processing any more commands.
     1113
     1114     When ‘-z’ is used, a zero byte (the ascii ‘NUL’ character) is added
     1115     between the lines (instead of a new line).
     1116
     1117     By default ‘sed’ does not terminate if there is no ’next’ input
     1118     line.  This is a GNU extension which can be disabled with
     1119     â€˜--posix’.  *Note N command on the last line: N_command_last_line.
     1120
     1121‘P’
     1122     Print out the portion of the pattern space up to the first newline.
     1123
     1124‘h’
     1125     Replace the contents of the hold space with the contents of the
     1126     pattern space.
     1127
     1128‘H’
     1129     Append a newline to the contents of the hold space, and then append
     1130     the contents of the pattern space to that of the hold space.
     1131
     1132‘g’
     1133     Replace the contents of the pattern space with the contents of the
     1134     hold space.
     1135
     1136‘G’
     1137     Append a newline to the contents of the pattern space, and then
     1138     append the contents of the hold space to that of the pattern space.
     1139
     1140‘x’
     1141     Exchange the contents of the hold and pattern spaces.
     1142
     1143   ---------- Footnotes ----------
     1144
     1145   (1) This is equivalent to ‘p’ unless the ‘-i’ option is being used.
     1146
     1147
     1148File: sed.info,  Node: Programming Commands,  Next: Extended Commands,  Prev: Other Commands,  Up: sed scripts
     1149
     11503.6 Commands for ‘sed’ gurus
     1151============================
     1152
     1153In most cases, use of these commands indicates that you are probably
     1154better off programming in something like ‘awk’ or Perl.  But
     1155occasionally one is committed to sticking with ‘sed’, and these commands
     1156can enable one to write quite convoluted scripts.
     1157
     1158‘: LABEL’
     1159     [No addresses allowed.]
     1160
     1161     Specify the location of LABEL for branch commands.  In all other
     1162     respects, a no-op.
     1163
     1164‘b LABEL’
     1165     Unconditionally branch to LABEL.  The LABEL may be omitted, in
     1166     which case the next cycle is started.
     1167
     1168‘t LABEL’
     1169     Branch to LABEL only if there has been a successful ‘s’ubstitution
     1170     since the last input line was read or conditional branch was taken.
     1171     The LABEL may be omitted, in which case the next cycle is started.
     1172
     1173
     1174File: sed.info,  Node: Extended Commands,  Next: Multiple commands syntax,  Prev: Programming Commands,  Up: sed scripts
     1175
     11763.7 Commands Specific to GNU ‘sed’
     1177==================================
     1178
     1179These commands are specific to GNU ‘sed’, so you must use them with care
     1180and only when you are sure that hindering portability is not evil.  They
     1181allow you to check for GNU ‘sed’ extensions or to do tasks that are
     1182required quite often, yet are unsupported by standard ‘sed’s.
     1183
     1184‘e [COMMAND]’
     1185     This command allows one to pipe input from a shell command into
     1186     pattern space.  Without parameters, the ‘e’ command executes the
     1187     command that is found in pattern space and replaces the pattern
     1188     space with the output; a trailing newline is suppressed.
     1189
     1190     If a parameter is specified, instead, the ‘e’ command interprets it
     1191     as a command and sends its output to the output stream.  The
     1192     command can run across multiple lines, all but the last ending with
     1193     a back-slash.
     1194
     1195     In both cases, the results are undefined if the command to be
     1196     executed contains a NUL character.
     1197
     1198     Note that, unlike the ‘r’ command, the output of the command will
     1199     be printed immediately; the ‘r’ command instead delays the output
     1200     to the end of the current cycle.
     1201
     1202‘F’
     1203     Print out the file name of the current input file (with a trailing
     1204     newline).
     1205
     1206‘Q [EXIT-CODE]’
     1207     This command accepts only one address.
     1208
     1209     This command is the same as ‘q’, but will not print the contents of
     1210     pattern space.  Like ‘q’, it provides the ability to return an exit
     1211     code to the caller.
     1212
     1213     This command can be useful because the only alternative ways to
     1214     accomplish this apparently trivial function are to use the ‘-n’
     1215     option (which can unnecessarily complicate your script) or
     1216     resorting to the following snippet, which wastes time by reading
     1217     the whole file without any visible effect:
     1218
     1219          :eat
     1220          $d       Quit silently on the last line
     1221          N        Read another line, silently
     1222          g        Overwrite pattern space each time to save memory
     1223          b eat
     1224
     1225‘R FILENAME’
     1226     Queue a line of FILENAME to be read and inserted into the output
     1227     stream at the end of the current cycle, or when the next input line
     1228     is read.  Note that if FILENAME cannot be read, or if its end is
     1229     reached, no line is appended, without any error indication.
     1230
     1231     As with the ‘r’ command, the special value ‘/dev/stdin’ is
     1232     supported for the file name, which reads a line from the standard
     1233     input.
     1234
     1235‘T LABEL’
     1236     Branch to LABEL only if there have been no successful
     1237     â€˜s’ubstitutions since the last input line was read or conditional
     1238     branch was taken.  The LABEL may be omitted, in which case the next
     1239     cycle is started.
     1240
     1241‘v VERSION’
     1242     This command does nothing, but makes ‘sed’ fail if GNU ‘sed’
     1243     extensions are not supported, simply because other versions of
     1244     â€˜sed’ do not implement it.  In addition, you can specify the
     1245     version of ‘sed’ that your script requires, such as ‘4.0.5’.  The
     1246     default is ‘4.0’ because that is the first version that implemented
     1247     this command.
     1248
     1249     This command enables all GNU extensions even if ‘POSIXLY_CORRECT’
     1250     is set in the environment.
     1251
     1252‘W FILENAME’
     1253     Write to the given filename the portion of the pattern space up to
     1254     the first newline.  Everything said under the ‘w’ command about
     1255     file handling holds here too.
     1256
     1257‘z’
     1258     This command empties the content of pattern space.  It is usually
     1259     the same as ‘s/.*//’, but is more efficient and works in the
     1260     presence of invalid multibyte sequences in the input stream.  POSIX
     1261     mandates that such sequences are _not_ matched by ‘.’, so that
     1262     there is no portable way to clear ‘sed’’s buffers in the middle of
     1263     the script in most multibyte locales (including UTF-8 locales).
     1264
     1265
     1266File: sed.info,  Node: Multiple commands syntax,  Prev: Extended Commands,  Up: sed scripts
     1267
     12683.8 Multiple commands syntax
     1269============================
     1270
     1271There are several methods to specify multiple commands in a ‘sed’
     1272program.
     1273
     1274   Using newlines is most natural when running a sed script from a file
     1275(using the ‘-f’ option).
     1276
     1277   On the command line, all ‘sed’ commands may be separated by newlines.
     1278Alternatively, you may specify each command as an argument to an ‘-e’
     1279option:
     1280
     1281     $ seq 6 | sed '1d
     1282     3d
     1283     5d'
     1284     2
     1285     4
     1286     6
     1287
     1288     $ seq 6 | sed -e 1d -e 3d -e 5d
     1289     2
     1290     4
     1291     6
     1292
     1293   A semicolon (‘;’) may be used to separate most simple commands:
     1294
     1295     $ seq 6 | sed '1d;3d;5d'
     1296     2
     1297     4
     1298     6
     1299
     1300   The ‘{’,‘}’,‘b’,‘t’,‘T’,‘:’ commands can be separated with a
     1301semicolon (this is a non-portable GNU ‘sed’ extension).
     1302
     1303     $ seq 4 | sed '{1d;3d}'
     1304     2
     1305     4
     1306
     1307     $ seq 6 | sed '{1d;3d};5d'
     1308     2
     1309     4
     1310     6
     1311
     1312   Labels used in ‘b’,‘t’,‘T’,‘:’ commands are read until a semicolon.
     1313Leading and trailing whitespace is ignored.  In the examples below the
     1314label is ‘x’.  The first example works with GNU ‘sed’.  The second is a
     1315portable equivalent.  For more information about branching and labels
     1316*note Branching and flow control::.
     1317
     1318     $ seq 3 | sed '/1/b x ; s/^/=/ ; :x ; 3d'
     1319     1
     1320     =2
     1321
     1322     $ seq 3 | sed -e '/1/bx' -e 's/^/=/' -e ':x' -e '3d'
     1323     1
     1324     =2
     1325
     13263.8.1 Commands Requiring a newline
     1327----------------------------------
     1328
     1329The following commands cannot be separated by a semicolon and require a
     1330newline:
     1331
     1332‘a’,‘c’,‘i’ (append/change/insert)
     1333
     1334     All characters following ‘a’,‘c’,‘i’ commands are taken as the text
     1335     to append/change/insert.  Using a semicolon leads to undesirable
     1336     results:
     1337
     1338          $ seq 2 | sed '1aHello ; 2d'
     1339          1
     1340          Hello ; 2d
     1341          2
     1342
     1343     Separate the commands using ‘-e’ or a newline:
     1344
     1345          $ seq 2 | sed -e 1aHello -e 2d
     1346          1
     1347          Hello
     1348
     1349          $ seq 2 | sed '1aHello
     1350          2d'
     1351          1
     1352          Hello
     1353
     1354     Note that specifying the text to add (‘Hello’) immediately after
     1355     â€˜a’,‘c’,‘i’ is itself a GNU ‘sed’ extension.  A portable,
     1356     POSIX-compliant alternative is:
     1357
     1358          $ seq 2 | sed '1a\
     1359          Hello
     1360          2d'
     1361          1
     1362          Hello
     1363
     1364‘#’ (comment)
     1365
     1366     All characters following ‘#’ until the next newline are ignored.
     1367
     1368          $ seq 3 | sed '# this is a comment ; 2d'
     1369          1
     1370          2
     1371          3
     1372
     1373
     1374          $ seq 3 | sed '# this is a comment
     1375          2d'
     1376          1
     1377          3
     1378
     1379‘r’,‘R’,‘w’,‘W’ (reading and writing files)
     1380
     1381     The ‘r’,‘R’,‘w’,‘W’ commands parse the filename until end of the
     1382     line.  If whitespace, comments or semicolons are found, they will
     1383     be included in the filename, leading to unexpected results:
     1384
     1385          $ seq 2 | sed '1w hello.txt ; 2d'
     1386          1
     1387          2
     1388
     1389          $ ls -log
     1390          total 4
     1391          -rw-rw-r-- 1 2 Jan 23 23:03 hello.txt ; 2d
     1392
     1393          $ cat 'hello.txt ; 2d'
     1394          1
     1395
     1396     Note that ‘sed’ silently ignores read/write errors in
     1397     â€˜r’,‘R’,‘w’,‘W’ commands (such as missing files).  In the following
     1398     example, ‘sed’ tries to read a file named ‘‘hello.txt ; N’’.  The
     1399     file is missing, and the error is silently ignored:
     1400
     1401          $ echo x | sed '1rhello.txt ; N'
     1402          x
     1403
     1404‘e’ (command execution)
     1405
     1406     Any characters following the ‘e’ command until the end of the line
     1407     will be sent to the shell.  If whitespace, comments or semicolons
     1408     are found, they will be included in the shell command, leading to
     1409     unexpected results:
     1410
     1411          $ echo a | sed '1e touch foo#bar'
     1412          a
     1413
     1414          $ ls -1
     1415          foo#bar
     1416
     1417          $ echo a | sed '1e touch foo ; s/a/b/'
     1418          sh: 1: s/a/b/: not found
     1419          a
     1420
     1421‘s///[we]’ (substitute with ‘e’ or ‘w’ flags)
     1422
     1423     In a substitution command, the ‘w’ flag writes the substitution
     1424     result to a file, and the ‘e’ flag executes the substitution result
     1425     as a shell command.  As with the ‘r/R/w/W/e’ commands, these must
     1426     be terminated with a newline.  If whitespace, comments or
     1427     semicolons are found, they will be included in the shell command or
     1428     filename, leading to unexpected results:
     1429
     1430          $ echo a | sed 's/a/b/w1.txt#foo'
     1431          b
     1432
     1433          $ ls -1
     1434          1.txt#foo
     1435
     1436
     1437File: sed.info,  Node: sed addresses,  Next: sed regular expressions,  Prev: sed scripts,  Up: Top
     1438
     14394 Addresses: selecting lines
     1440****************************
     1441
     1442* Menu:
     1443
     1444* Addresses overview::                Addresses overview
     1445* Numeric Addresses::                 selecting lines by numbers
     1446* Regexp Addresses::                  selecting lines by text matching
     1447* Range Addresses::                   selecting a range of lines
     1448* Zero Address::                      Using address ‘0’
     1449
     1450
     1451File: sed.info,  Node: Addresses overview,  Next: Numeric Addresses,  Up: sed addresses
     1452
     14534.1 Addresses overview
     1454======================
     1455
     1456Addresses determine on which line(s) the ‘sed’ command will be executed.
     1457The following command replaces any first occurrence of ‘hello’ with
     1458‘world’ only on line 144:
     1459
     1460     sed '144s/hello/world/' input.txt > output.txt
     1461
     1462   If no address is specified, the command is performed on all lines.
     1463The following command replaces ‘hello’ with ‘world’, targeting every
     1464line of the input file.  However, note that it modifies only the first
     1465instance of ‘hello’ on each line.  Use the ‘g’ modifier to affect every
     1466instance on each affected line.
     1467
     1468     sed 's/hello/world/' input.txt > output.txt
     1469
     1470   Addresses can contain regular expressions to match lines based on
     1471content instead of line numbers.  The following command replaces ‘hello’
     1472with ‘world’ only on lines containing the string ‘apple’:
     1473
     1474     sed '/apple/s/hello/world/' input.txt > output.txt
     1475
     1476   An address range is specified with two addresses separated by a comma
     1477(‘,’).  Addresses can be numeric, regular expressions, or a mix of both.
     1478The following command replaces ‘hello’ with ‘world’ only on lines 4 to
     147917 (inclusive):
     1480
     1481     sed '4,17s/hello/world/' input.txt > output.txt
     1482
     1483   Appending the ‘!’ character to the end of an address specification
     1484(before the command letter) negates the sense of the match.  That is, if
     1485the ‘!’ character follows an address or an address range, then only
     1486lines which do _not_ match the addresses will be selected.  The
     1487following command replaces ‘hello’ with ‘world’ only on lines _not_
     1488containing the string ‘apple’:
     1489
     1490     sed '/apple/!s/hello/world/' input.txt > output.txt
     1491
     1492   The following command replaces ‘hello’ with ‘world’ only on lines 1
     1493to 3 and from line 18 to the last line of the input file (i.e.
     1494excluding lines 4 to 17):
     1495
     1496     sed '4,17!s/hello/world/' input.txt > output.txt
     1497
     1498
     1499File: sed.info,  Node: Numeric Addresses,  Next: Regexp Addresses,  Prev: Addresses overview,  Up: sed addresses
     1500
     15014.2 Selecting lines by numbers
     1502==============================
     1503
     1504Addresses in a ‘sed’ script can be in any of the following forms:
     1505‘NUMBER’
     1506     Specifying a line number will match only that line in the input.
     1507     (Note that ‘sed’ counts lines continuously across all input files
     1508     unless ‘-i’ or ‘-s’ options are specified.)
     1509
     1510‘$’
     1511     This address matches the last line of the last file of input, or
     1512     the last line of each file when the ‘-i’ or ‘-s’ options are
     1513     specified.
     1514
     1515‘FIRST~STEP’
     1516     This GNU extension matches every STEPth line starting with line
     1517     FIRST.  In particular, lines will be selected when there exists a
     1518     non-negative N such that the current line-number equals FIRST + (N
     1519     * STEP).  Thus, one would use ‘1~2’ to select the odd-numbered
     1520     lines and ‘0~2’ for even-numbered lines; to pick every third line
     1521     starting with the second, ‘2~3’ would be used; to pick every fifth
     1522     line starting with the tenth, use ‘10~5’; and ‘50~0’ is just an
     1523     obscure way of saying ‘50’.
     1524
     1525     The following commands demonstrate the step address usage:
     1526
     1527          $ seq 10 | sed -n '0~4p'
     1528          4
     1529          8
     1530
     1531          $ seq 10 | sed -n '1~3p'
     1532          1
     1533          4
     1534          7
     1535          10
     1536
     1537
     1538File: sed.info,  Node: Regexp Addresses,  Next: Range Addresses,  Prev: Numeric Addresses,  Up: sed addresses
     1539
     15404.3 selecting lines by text matching
     1541====================================
     1542
     1543GNU ‘sed’ supports the following regular expression addresses.  The
     1544default regular expression is *note Basic Regular Expression (BRE): BRE
     1545syntax.  If ‘-E’ or ‘-r’ options are used, The regular expression should
     1546be in *note Extended Regular Expression (ERE): ERE syntax. syntax.
     1547*Note BRE vs ERE::.
     1548
     1549‘/REGEXP/’
     1550     This will select any line which matches the regular expression
     1551     REGEXP.  If REGEXP itself includes any ‘/’ characters, each must be
     1552     escaped by a backslash (‘\’).
     1553
     1554     The following command prints lines in ‘/etc/passwd’ which end with
     1555     â€˜bash’(1):
     1556
     1557          sed -n '/bash$/p' /etc/passwd
     1558
     1559     The empty regular expression ‘//’ repeats the last regular
     1560     expression match (the same holds if the empty regular expression is
     1561     passed to the ‘s’ command).  Note that modifiers to regular
     1562     expressions are evaluated when the regular expression is compiled,
     1563     thus it is invalid to specify them together with the empty regular
     1564     expression.
     1565
     1566‘\%REGEXP%’
     1567     (The ‘%’ may be replaced by any other single character.)
     1568
     1569     This also matches the regular expression REGEXP, but allows one to
     1570     use a different delimiter than ‘/’.  This is particularly useful if
     1571     the REGEXP itself contains a lot of slashes, since it avoids the
     1572     tedious escaping of every ‘/’.  If REGEXP itself includes any
     1573     delimiter characters, each must be escaped by a backslash (‘\’).
     1574
     1575     The following commands are equivalent.  They print lines which
     1576     start with ‘/home/alice/documents/’:
     1577
     1578          sed -n '/^\/home\/alice\/documents\//p'
     1579          sed -n '\%^/home/alice/documents/%p'
     1580          sed -n '\;^/home/alice/documents/;p'
     1581
     1582‘/REGEXP/I’
     1583‘\%REGEXP%I’
     1584     The ‘I’ modifier to regular-expression matching is a GNU extension
     1585     which causes the REGEXP to be matched in a case-insensitive manner.
     1586
     1587     In many other programming languages, a lower case ‘i’ is used for
     1588     case-insensitive regular expression matching.  However, in ‘sed’
     1589     the ‘i’ is used for the insert command (*note insert command::).
     1590
     1591     Observe the difference between the following examples.
     1592
     1593     In this example, ‘/b/I’ is the address: regular expression with ‘I’
     1594     modifier.  ‘d’ is the delete command:
     1595
     1596          $ printf "%s\n" a b c | sed '/b/Id'
     1597          a
     1598          c
     1599
     1600     Here, ‘/b/’ is the address: a regular expression.  ‘i’ is the
     1601     insert command.  ‘d’ is the value to insert.  A line with ‘d’ is
     1602     then inserted above the matched line:
     1603
     1604          $ printf "%s\n" a b c | sed '/b/id'
     1605          a
     1606          d
     1607          b
     1608          c
     1609
     1610‘/REGEXP/M’
     1611‘\%REGEXP%M’
     1612     The ‘M’ modifier to regular-expression matching is a GNU ‘sed’
     1613     extension which directs GNU ‘sed’ to match the regular expression
     1614     in ‘multi-line’ mode.  The modifier causes ‘^’ and ‘$’ to match
     1615     respectively (in addition to the normal behavior) the empty string
     1616     after a newline, and the empty string before a newline.  There are
     1617     special character sequences (‘\`’ and ‘\'’) which always match the
     1618     beginning or the end of the buffer.  In addition, the period
     1619     character does not match a new-line character in multi-line mode.
     1620
     1621   Regex addresses operate on the content of the current pattern space.
     1622If the pattern space is changed (for example with ‘s///’ command) the
     1623regular expression matching will operate on the changed text.
     1624
     1625   In the following example, automatic printing is disabled with ‘-n’.
     1626The ‘s/2/X/’ command changes lines containing ‘2’ to ‘X’.  The command
     1627‘/[0-9]/p’ matches lines with digits and prints them.  Because the
     1628second line is changed before the ‘/[0-9]/’ regex, it will not match and
     1629will not be printed:
     1630
     1631     $ seq 3 | sed -n 's/2/X/ ; /[0-9]/p'
     1632     1
     1633     3
     1634
     1635   ---------- Footnotes ----------
     1636
     1637   (1) There are of course many other ways to do the same, e.g.
     1638     grep 'bash$' /etc/passwd
     1639     awk -F: '$7 == "/bin/bash"' /etc/passwd
     1640
     1641
     1642File: sed.info,  Node: Range Addresses,  Next: Zero Address,  Prev: Regexp Addresses,  Up: sed addresses
     1643
     16444.4 Range Addresses
     1645===================
     1646
     1647An address range can be specified by specifying two addresses separated
     1648by a comma (‘,’).  An address range matches lines starting from where
     1649the first address matches, and continues until the second address
     1650matches (inclusively):
     1651
     1652     $ seq 10 | sed -n '4,6p'
     1653     4
     1654     5
     1655     6
     1656
     1657   If the second address is a REGEXP, then checking for the ending match
     1658will start with the line _following_ the line which matched the first
     1659address: a range will always span at least two lines (except of course
     1660if the input stream ends).
     1661
     1662     $ seq 10 | sed -n '4,/[0-9]/p'
     1663     4
     1664     5
     1665
     1666   If the second address is a NUMBER less than (or equal to) the line
     1667matching the first address, then only the one line is matched:
     1668
     1669     $ seq 10 | sed -n '4,1p'
     1670     4
     1671
     1672   GNU ‘sed’ also supports some special two-address forms; all these are
     1673GNU extensions:
     1674‘0,/REGEXP/’
     1675     A line number of ‘0’ can be used in an address specification like
     1676     â€˜0,/REGEXP/’ so that ‘sed’ will try to match REGEXP in the first
     1677     input line too.  In other words, ‘0,/REGEXP/’ is similar to
     1678     â€˜1,/REGEXP/’, except that if ADDR2 matches the very first line of
     1679     input the ‘0,/REGEXP/’ form will consider it to end the range,
     1680     whereas the ‘1,/REGEXP/’ form will match the beginning of its range
     1681     and hence make the range span up to the _second_ occurrence of the
     1682     regular expression.
     1683
     1684     The following examples demonstrate the difference between starting
     1685     with address 1 and 0:
     1686
     1687          $ seq 10 | sed -n '1,/[0-9]/p'
     1688          1
     1689          2
     1690
     1691          $ seq 10 | sed -n '0,/[0-9]/p'
     1692          1
     1693
     1694‘ADDR1,+N’
     1695     Matches ADDR1 and the N lines following ADDR1.
     1696
     1697          $ seq 10 | sed -n '6,+2p'
     1698          6
     1699          7
     1700          8
     1701
     1702     ADDR1 can be a line number or a regular expression.
     1703
     1704‘ADDR1,~N’
     1705     Matches ADDR1 and the lines following ADDR1 until the next line
     1706     whose input line number is a multiple of N.  The following command
     1707     prints starting at line 6, until the next line which is a multiple
     1708     of 4 (i.e.  line 8):
     1709
     1710          $ seq 10 | sed -n '6,~4p'
     1711          6
     1712          7
     1713          8
     1714
     1715     ADDR1 can be a line number or a regular expression.
     1716
     1717
     1718File: sed.info,  Node: Zero Address,  Prev: Range Addresses,  Up: sed addresses
     1719
     17204.5 Zero Address
     1721================
     1722
     1723As a GNU ‘sed’ extension, ‘0’ address can be used in two cases:
     1724  1. In a regex range addresses as ‘0,/REGEXP/’ (*note Zero Address
     1725     Regex Range::).
     1726  2. With the ‘r’ command, inserting a file before the first line (*note
     1727     Adding a header to multiple files::).
     1728
     1729   Note that these are the only places where the ‘0’ address makes
     1730sense; Commands which are given the ‘0’ address in any other way will
     1731give an error.
     1732
     1733
     1734File: sed.info,  Node: sed regular expressions,  Next: advanced sed,  Prev: sed addresses,  Up: Top
     1735
     17365 Regular Expressions: selecting text
     1737*************************************
     1738
     1739* Menu:
     1740
     1741* Regular Expressions Overview:: Overview of Regular expression in ‘sed’
     1742* BRE vs ERE::               Basic (BRE) and extended (ERE) regular expression
     1743                             syntax
     1744* BRE syntax::               Overview of basic regular expression syntax
     1745* ERE syntax::               Overview of extended regular expression syntax
     1746* Character Classes and Bracket Expressions::
     1747* regexp extensions::        Additional regular expression commands
     1748* Back-references and Subexpressions:: Back-references and Subexpressions
     1749* Escapes::                  Specifying special characters
     1750* Locale Considerations::    Multibyte characters and locale considerations
     1751
     1752
     1753File: sed.info,  Node: Regular Expressions Overview,  Next: BRE vs ERE,  Up: sed regular expressions
     1754
     17555.1 Overview of regular expression in ‘sed’
     1756===========================================
     1757
     1758To know how to use ‘sed’, people should understand regular expressions
     1759(“regexp” for short).  A regular expression is a pattern that is matched
     1760against a subject string from left to right.  Most characters are
     1761“ordinary”: they stand for themselves in a pattern, and match the
     1762corresponding characters.  Regular expressions in ‘sed’ are specified
     1763between two slashes.
     1764
     1765   The following command prints lines containing the string ‘hello’:
     1766
     1767     sed -n '/hello/p'
     1768
     1769   The above example is equivalent to this ‘grep’ command:
     1770
     1771     grep 'hello'
     1772
     1773   The power of regular expressions comes from the ability to include
     1774alternatives and repetitions in the pattern.  These are encoded in the
     1775pattern by the use of “special characters”, which do not stand for
     1776themselves but instead are interpreted in some special way.
     1777
     1778   The character ‘^’ (caret) in a regular expression matches the
     1779beginning of the line.  The character ‘.’ (dot) matches any single
     1780character.  The following ‘sed’ command matches and prints lines which
     1781start with the letter ‘b’, followed by any single character, followed by
     1782the letter ‘d’:
     1783
     1784     $ printf "%s\n" abode bad bed bit bid byte body | sed -n '/^b.d/p'
     1785     bad
     1786     bed
     1787     bid
     1788     body
     1789
     1790   The following sections explain the meaning and usage of special
     1791characters in regular expressions.
     1792
     1793
     1794File: sed.info,  Node: BRE vs ERE,  Next: BRE syntax,  Prev: Regular Expressions Overview,  Up: sed regular expressions
     1795
     17965.2 Basic (BRE) and extended (ERE) regular expression
     1797=====================================================
     1798
     1799Basic and extended regular expressions are two variations on the syntax
     1800of the specified pattern.  Basic Regular Expression (BRE) syntax is the
     1801default in ‘sed’ (and similarly in ‘grep’).  Use the POSIX-specified
     1802‘-E’ option (‘-r’, ‘--regexp-extended’) to enable Extended Regular
     1803Expression (ERE) syntax.
     1804
     1805   In GNU ‘sed’, the only difference between basic and extended regular
     1806expressions is in the behavior of a few special characters: ‘?’, ‘+’,
     1807parentheses, braces (‘{}’), and ‘|’.
     1808
     1809   With basic (BRE) syntax, these characters do not have special meaning
     1810unless prefixed with a backslash (‘\’); While with extended (ERE) syntax
     1811it is reversed: these characters are special unless they are prefixed
     1812with backslash (‘\’).
     1813
     1814Desired pattern      Basic (BRE) Syntax         Extended (ERE) Syntax
     1815                                               
     1816--------------------------------------------------------------------------
     1817literal ‘+’ (plus         $ echo 'a+b=c' > foo       $ echo 'a+b=c' > foo
     1818sign)                     $ sed -n '/a+b/p' foo      $ sed -E -n '/a\+b/p' foo
     1819                          a+b=c                      a+b=c
     1820                                               
     1821One or more ‘a’           $ echo aab > foo           $ echo aab > foo
     1822characters                $ sed -n '/a\+b/p' foo     $ sed -E -n '/a+b/p' foo
     1823followed by ‘b’           aab                        aab
     1824(plus sign as                                   
     1825special
     1826meta-character)
     1827
     1828
     1829File: sed.info,  Node: BRE syntax,  Next: ERE syntax,  Prev: BRE vs ERE,  Up: sed regular expressions
     1830
     18315.3 Overview of basic regular expression syntax
     1832===============================================
     1833
     1834Here is a brief description of regular expression syntax as used in
     1835‘sed’.
     1836
     1837‘CHAR’
     1838     A single ordinary character matches itself.
     1839
     1840‘*’
     1841     Matches a sequence of zero or more instances of matches for the
     1842     preceding regular expression, which must be an ordinary character,
     1843     a special character preceded by ‘\’, a ‘.’, a grouped regexp (see
     1844     below), or a bracket expression.  As a GNU extension, a postfixed
     1845     regular expression can also be followed by ‘*’; for example, ‘a**’
     1846     is equivalent to ‘a*’.  POSIX 1003.1-2001 says that ‘*’ stands for
     1847     itself when it appears at the start of a regular expression or
     1848     subexpression, but many non-GNU implementations do not support this
     1849     and portable scripts should instead use ‘\*’ in these contexts.
     1850‘.’
     1851     Matches any character, including newline.
     1852
     1853‘^’
     1854     Matches the null string at beginning of the pattern space, i.e.
     1855     what appears after the circumflex must appear at the beginning of
     1856     the pattern space.
     1857
     1858     In most scripts, pattern space is initialized to the content of
     1859     each line (*note How ‘sed’ works: Execution Cycle.).  So, it is a
     1860     useful simplification to think of ‘^#include’ as matching only
     1861     lines where ‘#include’ is the first thing on the line—if there is
     1862     any preceding space, for example, the match fails.  This
     1863     simplification is valid as long as the original content of pattern
     1864     space is not modified, for example with an ‘s’ command.
     1865
     1866     â€˜^’ acts as a special character only at the beginning of the
     1867     regular expression or subexpression (that is, after ‘\(’ or ‘\|’).
     1868     Portable scripts should avoid ‘^’ at the beginning of a
     1869     subexpression, though, as POSIX allows implementations that treat
     1870     â€˜^’ as an ordinary character in that context.
     1871
     1872‘$’
     1873     It is the same as ‘^’, but refers to end of pattern space.  ‘$’
     1874     also acts as a special character only at the end of the regular
     1875     expression or subexpression (that is, before ‘\)’ or ‘\|’), and its
     1876     use at the end of a subexpression is not portable.
     1877
     1878‘[LIST]’
     1879‘[^LIST]’
     1880     Matches any single character in LIST: for example, ‘[aeiou]’
     1881     matches all vowels.  A list may include sequences like
     1882     â€˜CHAR1-CHAR2’, which matches any character between (inclusive)
     1883     CHAR1 and CHAR2.  *Note Character Classes and Bracket
     1884     Expressions::.
     1885
     1886‘\+’
     1887     As ‘*’, but matches one or more.  It is a GNU extension.
     1888
     1889‘\?’
     1890     As ‘*’, but only matches zero or one.  It is a GNU extension.
     1891
     1892‘\{I\}’
     1893     As ‘*’, but matches exactly I sequences (I is a decimal integer;
     1894     for portability, keep it between 0 and 255 inclusive).
     1895
     1896‘\{I,J\}’
     1897     Matches between I and J, inclusive, sequences.
     1898
     1899‘\{I,\}’
     1900     Matches more than or equal to I sequences.
     1901
     1902‘\(REGEXP\)’
     1903     Groups the inner REGEXP as a whole, this is used to:
     1904
     1905        • Apply postfix operators, like ‘\(abcd\)*’: this will search
     1906          for zero or more whole sequences of ‘abcd’, while ‘abcd*’
     1907          would search for ‘abc’ followed by zero or more occurrences of
     1908          ‘d’.  Note that support for ‘\(abcd\)*’ is required by POSIX
     1909          1003.1-2001, but many non-GNU implementations do not support
     1910          it and hence it is not universally portable.
     1911
     1912        • Use back references (see below).
     1913
     1914‘REGEXP1\|REGEXP2’
     1915     Matches either REGEXP1 or REGEXP2.  Use parentheses to use complex
     1916     alternative regular expressions.  The matching process tries each
     1917     alternative in turn, from left to right, and the first one that
     1918     succeeds is used.  It is a GNU extension.
     1919
     1920‘REGEXP1REGEXP2’
     1921     Matches the concatenation of REGEXP1 and REGEXP2.  Concatenation
     1922     binds more tightly than ‘\|’, ‘^’, and ‘$’, but less tightly than
     1923     the other regular expression operators.
     1924
     1925‘\DIGIT’
     1926     Matches the DIGIT-th ‘\(...\)’ parenthesized subexpression in the
     1927     regular expression.  This is called a “back reference”.
     1928     Subexpressions are implicitly numbered by counting occurrences of
     1929     â€˜\(’ left-to-right.
     1930
     1931‘\n’
     1932     Matches the newline character.
     1933
     1934‘\CHAR’
     1935     Matches CHAR, where CHAR is one of ‘$’, ‘*’, ‘.’, ‘[’, ‘\’, or ‘^’.
     1936     Note that the only C-like backslash sequences that you can portably
     1937     assume to be interpreted are ‘\n’ and ‘\\’; in particular ‘\t’ is
     1938     not portable, and matches a ‘t’ under most implementations of
     1939     â€˜sed’, rather than a tab character.
     1940
     1941   Note that the regular expression matcher is greedy, i.e., matches are
     1942attempted from left to right and, if two or more matches are possible
     1943starting at the same character, it selects the longest.
     1944
     1945Examples:
     1946‘abcdef’
     1947     Matches ‘abcdef’.
     1948
     1949‘a*b’
     1950     Matches zero or more ‘a’s followed by a single ‘b’.  For example,
     1951     â€˜b’ or ‘aaaaab’.
     1952
     1953‘a\?b’
     1954     Matches ‘b’ or ‘ab’.
     1955
     1956‘a\+b\+’
     1957     Matches one or more ‘a’s followed by one or more ‘b’s: ‘ab’ is the
     1958     shortest possible match, but other examples are ‘aaaab’ or ‘abbbbb’
     1959     or ‘aaaaaabbbbbbb’.
     1960
     1961‘.*’
     1962‘.\+’
     1963     These two both match all the characters in a string; however, the
     1964     first matches every string (including the empty string), while the
     1965     second matches only strings containing at least one character.
     1966
     1967‘^main.*(.*)’
     1968     This matches a string starting with ‘main’, followed by an opening
     1969     and closing parenthesis.  The ‘n’, ‘(’ and ‘)’ need not be
     1970     adjacent.
     1971
     1972‘^#’
     1973     This matches a string beginning with ‘#’.
     1974
     1975‘\\$’
     1976     This matches a string ending with a single backslash.  The regexp
     1977     contains two backslashes for escaping.
     1978
     1979‘\$’
     1980     Instead, this matches a string consisting of a single dollar sign,
     1981     because it is escaped.
     1982
     1983‘[a-zA-Z0-9]’
     1984     In the C locale, this matches any ASCII letters or digits.
     1985
     1986‘[^ ‘<TAB>’]\+’
     1987     (Here ‘<TAB>’ stands for a single tab character.)  This matches a
     1988     string of one or more characters, none of which is a space or a
     1989     tab.  Usually this means a word.
     1990
     1991‘^\(.*\)\n\1$’
     1992     This matches a string consisting of two equal substrings separated
     1993     by a newline.
     1994
     1995‘.\{9\}A$’
     1996     This matches nine characters followed by an ‘A’ at the end of a
     1997     line.
     1998
     1999‘^.\{15\}A’
     2000     This matches the start of a string that contains 16 characters, the
     2001     last of which is an ‘A’.
     2002
     2003
     2004File: sed.info,  Node: ERE syntax,  Next: Character Classes and Bracket Expressions,  Prev: BRE syntax,  Up: sed regular expressions
     2005
     20065.4 Overview of extended regular expression syntax
     2007==================================================
     2008
     2009The only difference between basic and extended regular expressions is in
     2010the behavior of a few characters: ‘?’, ‘+’, parentheses, braces (‘{}’),
     2011and ‘|’.  While basic regular expressions require these to be escaped if
     2012you want them to behave as special characters, when using extended
     2013regular expressions you must escape them if you want them _to match a
     2014literal character_.  ‘|’ is special here because ‘\|’ is a GNU extension
     2015– standard basic regular expressions do not provide its functionality.
     2016
     2017Examples:
     2018‘abc?’
     2019     becomes ‘abc\?’ when using extended regular expressions.  It
     2020     matches the literal string ‘abc?’.
     2021
     2022‘c\+’
     2023     becomes ‘c+’ when using extended regular expressions.  It matches
     2024     one or more ‘c’s.
     2025
     2026‘a\{3,\}’
     2027     becomes ‘a{3,}’ when using extended regular expressions.  It
     2028     matches three or more ‘a’s.
     2029
     2030‘\(abc\)\{2,3\}’
     2031     becomes ‘(abc){2,3}’ when using extended regular expressions.  It
     2032     matches either ‘abcabc’ or ‘abcabcabc’.
     2033
     2034‘\(abc*\)\1’
     2035     becomes ‘(abc*)\1’ when using extended regular expressions.
     2036     Backreferences must still be escaped when using extended regular
     2037     expressions.
     2038
     2039‘a\|b’
     2040     becomes ‘a|b’ when using extended regular expressions.  It matches
     2041     â€˜a’ or ‘b’.
     2042
     2043
     2044File: sed.info,  Node: Character Classes and Bracket Expressions,  Next: regexp extensions,  Prev: ERE syntax,  Up: sed regular expressions
     2045
     20465.5 Character Classes and Bracket Expressions
     2047=============================================
     2048
     2049A “bracket expression” is a list of characters enclosed by ‘[’ and ‘]’.
     2050It matches any single character in that list; if the first character of
     2051the list is the caret ‘^’, then it matches any character *not* in the
     2052list.  For example, the following command replaces the strings ‘gray’ or
     2053‘grey’ with ‘blue’:
     2054
     2055     sed  's/gr[ae]y/blue/'
     2056
     2057   Bracket expressions can be used in both *note basic: BRE syntax. and
     2058*note extended: ERE syntax. regular expressions (that is, with or
     2059without the ‘-E’/‘-r’ options).
     2060
     2061   Within a bracket expression, a “range expression” consists of two
     2062characters separated by a hyphen.  It matches any single character that
     2063sorts between the two characters, inclusive.  In the default C locale,
     2064the sorting sequence is the native character order; for example, ‘[a-d]’
     2065is equivalent to ‘[abcd]’.
     2066
     2067   Finally, certain named classes of characters are predefined within
     2068bracket expressions, as follows.
     2069
     2070   These named classes must be used _inside_ brackets themselves.
     2071Correct usage:
     2072     $ echo 1 | sed 's/[[:digit:]]/X/'
     2073     X
     2074
     2075   Incorrect usage is rejected by newer ‘sed’ versions.  Older versions
     2076accepted it but treated it as a single bracket expression (which is
     2077equivalent to ‘[dgit:]’, that is, only the characters D/G/I/T/:):
     2078     # current GNU sed versions - incorrect usage rejected
     2079     $ echo 1 | sed 's/[:digit:]/X/'
     2080     sed: character class syntax is [[:space:]], not [:space:]
     2081
     2082     # older GNU sed versions
     2083     $ echo 1 | sed 's/[:digit:]/X/'
     2084     1
     2085
     2086‘[:alnum:]’
     2087     Alphanumeric characters: ‘[:alpha:]’ and ‘[:digit:]’; in the ‘C’
     2088     locale and ASCII character encoding, this is the same as
     2089     â€˜[0-9A-Za-z]’.
     2090
     2091‘[:alpha:]’
     2092     Alphabetic characters: ‘[:lower:]’ and ‘[:upper:]’; in the ‘C’
     2093     locale and ASCII character encoding, this is the same as
     2094     â€˜[A-Za-z]’.
     2095
     2096‘[:blank:]’
     2097     Blank characters: space and tab.
     2098
     2099‘[:cntrl:]’
     2100     Control characters.  In ASCII, these characters have octal codes
     2101     000 through 037, and 177 (DEL). In other character sets, these are
     2102     the equivalent characters, if any.
     2103
     2104‘[:digit:]’
     2105     Digits: ‘0 1 2 3 4 5 6 7 8 9’.
     2106
     2107‘[:graph:]’
     2108     Graphical characters: ‘[:alnum:]’ and ‘[:punct:]’.
     2109
     2110‘[:lower:]’
     2111     Lower-case letters; in the ‘C’ locale and ASCII character encoding,
     2112     this is ‘a b c d e f g h i j k l m n o p q r s t u v w x y z’.
     2113
     2114‘[:print:]’
     2115     Printable characters: ‘[:alnum:]’, ‘[:punct:]’, and space.
     2116
     2117‘[:punct:]’
     2118     Punctuation characters; in the ‘C’ locale and ASCII character
     2119     encoding, this is ‘! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \
     2120     ] ^ _ ` { | } ~’.
     2121
     2122‘[:space:]’
     2123     Space characters: in the ‘C’ locale, this is tab, newline, vertical
     2124     tab, form feed, carriage return, and space.
     2125
     2126‘[:upper:]’
     2127     Upper-case letters: in the ‘C’ locale and ASCII character encoding,
     2128     this is ‘A B C D E F G H I J K L M N O P Q R S T U V W X Y Z’.
     2129
     2130‘[:xdigit:]’
     2131     Hexadecimal digits: ‘0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f’.
     2132
     2133   Note that the brackets in these class names are part of the symbolic
     2134names, and must be included in addition to the brackets delimiting the
     2135bracket expression.
     2136
     2137   Most meta-characters lose their special meaning inside bracket
     2138expressions:
     2139
     2140‘]’
     2141     ends the bracket expression if it’s not the first list item.  So,
     2142     if you want to make the ‘]’ character a list item, you must put it
     2143     first.
     2144
     2145‘-’
     2146     represents the range if it’s not first or last in a list or the
     2147     ending point of a range.
     2148
     2149‘^’
     2150     represents the characters not in the list.  If you want to make the
     2151     â€˜^’ character a list item, place it anywhere but first.
     2152
     2153   TODO: incorporate this paragraph (copied verbatim from BRE section).
     2154
     2155   The characters ‘$’, ‘*’, ‘.’, ‘[’, and ‘\’ are normally not special
     2156within LIST.  For example, ‘[\*]’ matches either ‘\’ or ‘*’, because the
     2157‘\’ is not special here.  However, strings like ‘[.ch.]’, ‘[=a=]’, and
     2158‘[:space:]’ are special within LIST and represent collating symbols,
     2159equivalence classes, and character classes, respectively, and ‘[’ is
     2160therefore special within LIST when it is followed by ‘.’, ‘=’, or ‘:’.
     2161Also, when not in ‘POSIXLY_CORRECT’ mode, special escapes like ‘\n’ and
     2162‘\t’ are recognized within LIST.  *Note Escapes::.
     2163
     2164‘[.’
     2165     represents the open collating symbol.
     2166
     2167‘.]’
     2168     represents the close collating symbol.
     2169
     2170‘[=’
     2171     represents the open equivalence class.
     2172
     2173‘=]’
     2174     represents the close equivalence class.
     2175
     2176‘[:’
     2177     represents the open character class symbol, and should be followed
     2178     by a valid character class name.
     2179
     2180‘:]’
     2181     represents the close character class symbol.
     2182
     2183
     2184File: sed.info,  Node: regexp extensions,  Next: Back-references and Subexpressions,  Prev: Character Classes and Bracket Expressions,  Up: sed regular expressions
     2185
     21865.6 regular expression extensions
     2187=================================
     2188
     2189The following sequences have special meaning inside regular expressions
     2190(used in *note addresses: Regexp Addresses. and the ‘s’ command).
     2191
     2192   These can be used in both *note basic: BRE syntax. and *note
     2193extended: ERE syntax. regular expressions (that is, with or without the
     2194‘-E’/‘-r’ options).
     2195
     2196‘\w’
     2197     Matches any “word” character.  A “word” character is any letter or
     2198     digit or the underscore character.
     2199
     2200          $ echo "abc %-= def." | sed 's/\w/X/g'
     2201          XXX %-= XXX.
     2202
     2203‘\W’
     2204     Matches any “non-word” character.
     2205
     2206          $ echo "abc %-= def." | sed 's/\W/X/g'
     2207          abcXXXXXdefX
     2208
     2209‘\b’
     2210     Matches a word boundary; that is it matches if the character to the
     2211     left is a “word” character and the character to the right is a
     2212     â€œnon-word” character, or vice-versa.
     2213
     2214          $ echo "abc %-= def." | sed 's/\b/X/g'
     2215          XabcX %-= XdefX.
     2216
     2217‘\B’
     2218     Matches everywhere but on a word boundary; that is it matches if
     2219     the character to the left and the character to the right are either
     2220     both “word” characters or both “non-word” characters.
     2221
     2222          $ echo "abc %-= def." | sed 's/\B/X/g'
     2223          aXbXc X%X-X=X dXeXf.X
     2224
     2225‘\s’
     2226     Matches whitespace characters (spaces and tabs).  Newlines embedded
     2227     in the pattern/hold spaces will also match:
     2228
     2229          $ echo "abc %-= def." | sed 's/\s/X/g'
     2230          abcX%-=Xdef.
     2231
     2232‘\S’
     2233     Matches non-whitespace characters.
     2234
     2235          $ echo "abc %-= def." | sed 's/\S/X/g'
     2236          XXX XXX XXXX
     2237
     2238‘\<’
     2239     Matches the beginning of a word.
     2240
     2241          $ echo "abc %-= def." | sed 's/\</X/g'
     2242          Xabc %-= Xdef.
     2243
     2244‘\>’
     2245     Matches the end of a word.
     2246
     2247          $ echo "abc %-= def." | sed 's/\>/X/g'
     2248          abcX %-= defX.
     2249
     2250‘\`’
     2251     Matches only at the start of pattern space.  This is different from
     2252     â€˜^’ in multi-line mode.
     2253
     2254     Compare the following two examples:
     2255
     2256          $ printf "a\nb\nc\n" | sed 'N;N;s/^/X/gm'
     2257          Xa
     2258          Xb
     2259          Xc
     2260
     2261          $ printf "a\nb\nc\n" | sed 'N;N;s/\`/X/gm'
     2262          Xa
     2263          b
     2264          c
     2265
     2266‘\'’
     2267     Matches only at the end of pattern space.  This is different from
     2268     â€˜$’ in multi-line mode.
     2269
     2270
     2271File: sed.info,  Node: Back-references and Subexpressions,  Next: Escapes,  Prev: regexp extensions,  Up: sed regular expressions
     2272
     22735.7 Back-references and Subexpressions
     2274======================================
     2275
     2276“back-references” are regular expression commands which refer to a
     2277previous part of the matched regular expression.  Back-references are
     2278specified with backslash and a single digit (e.g.  ‘\1’).  The part of
     2279the regular expression they refer to is called a “subexpression”, and is
     2280designated with parentheses.
     2281
     2282   Back-references and subexpressions are used in two cases: in the
     2283regular expression search pattern, and in the REPLACEMENT part of the
     2284‘s’ command (*note Regular Expression Addresses: Regexp Addresses. and
     2285*note The "s" Command::).
     2286
     2287   In a regular expression pattern, back-references are used to match
     2288the same content as a previously matched subexpression.  In the
     2289following example, the subexpression is ‘.’ - any single character
     2290(being surrounded by parentheses makes it a subexpression).  The
     2291back-reference ‘\1’ asks to match the same content (same character) as
     2292the sub-expression.
     2293
     2294   The command below matches words starting with any character, followed
     2295by the letter ‘o’, followed by the same character as the first.
     2296
     2297     $ sed -E -n '/^(.)o\1$/p' /usr/share/dict/words
     2298     bob
     2299     mom
     2300     non
     2301     pop
     2302     sos
     2303     tot
     2304     wow
     2305
     2306   Multiple subexpressions are automatically numbered from
     2307left-to-right.  This command searches for 6-letter palindromes (the
     2308first three letters are 3 subexpressions, followed by 3 back-references
     2309in reverse order):
     2310
     2311     $ sed -E -n '/^(.)(.)(.)\3\2\1$/p' /usr/share/dict/words
     2312     redder
     2313
     2314   In the ‘s’ command, back-references can be used in the REPLACEMENT
     2315part to refer back to subexpressions in the REGEXP part.
     2316
     2317   The following example uses two subexpressions in the regular
     2318expression to match two space-separated words.  The back-references in
     2319the REPLACEMENT part prints the words in a different order:
     2320
     2321     $ echo "James Bond" | sed -E 's/(.*) (.*)/The name is \2, \1 \2./'
     2322     The name is Bond, James Bond.
     2323
     2324   When used with alternation, if the group does not participate in the
     2325match then the back-reference makes the whole match fail.  For example,
     2326‘a(.)|b\1’ will not match ‘ba’.  When multiple regular expressions are
     2327given with ‘-e’ or from a file (‘-f FILE’), back-references are local to
     2328each expression.
     2329
     2330
     2331File: sed.info,  Node: Escapes,  Next: Locale Considerations,  Prev: Back-references and Subexpressions,  Up: sed regular expressions
     2332
     23335.8 Escape Sequences - specifying special characters
     2334====================================================
     2335
     2336Until this chapter, we have only encountered escapes of the form ‘\^’,
     2337which tell ‘sed’ not to interpret the circumflex as a special character,
     2338but rather to take it literally.  For example, ‘\*’ matches a single
     2339asterisk rather than zero or more backslashes.
     2340
     2341   This chapter introduces another kind of escape(1)—that is, escapes
     2342that are applied to a character or sequence of characters that
     2343ordinarily are taken literally, and that ‘sed’ replaces with a special
     2344character.  This provides a way of encoding non-printable characters in
     2345patterns in a visible manner.  There is no restriction on the appearance
     2346of non-printing characters in a ‘sed’ script but when a script is being
     2347prepared in the shell or by text editing, it is usually easier to use
     2348one of the following escape sequences than the binary character it
     2349represents:
     2350
     2351   The list of these escapes is:
     2352
     2353‘\a’
     2354     Produces or matches a BEL character, that is an “alert” (ASCII 7).
     2355
     2356‘\f’
     2357     Produces or matches a form feed (ASCII 12).
     2358
     2359‘\n’
     2360     Produces or matches a newline (ASCII 10).
     2361
     2362‘\r’
     2363     Produces or matches a carriage return (ASCII 13).
     2364
     2365‘\t’
     2366     Produces or matches a horizontal tab (ASCII 9).
     2367
     2368‘\v’
     2369     Produces or matches a so called “vertical tab” (ASCII 11).
     2370
     2371‘\cX’
     2372     Produces or matches ‘CONTROL-X’, where X is any character.  The
     2373     precise effect of ‘\cX’ is as follows: if X is a lower case letter,
     2374     it is converted to upper case.  Then bit 6 of the character (hex
     2375     40) is inverted.  Thus ‘\cz’ becomes hex 1A, but ‘\c{’ becomes hex
     2376     3B, while ‘\c;’ becomes hex 7B.
     2377
     2378‘\dXXX’
     2379     Produces or matches a character whose decimal ASCII value is XXX.
     2380
     2381‘\oXXX’
     2382     Produces or matches a character whose octal ASCII value is XXX.
     2383
     2384‘\xXX’
     2385     Produces or matches a character whose hexadecimal ASCII value is
     2386     XX.
     2387
     2388   â€˜\b’ (backspace) was omitted because of the conflict with the
     2389existing “word boundary” meaning.
     2390
     23915.8.1 Escaping Precedence
     2392-------------------------
     2393
     2394GNU ‘sed’ processes escape sequences _before_ passing the text onto the
     2395regular-expression matching of the ‘s///’ command and Address matching.
     2396Thus the following two commands are equivalent (‘0x5e’ is the
     2397hexadecimal ASCII value of the character ‘^’):
     2398
     2399     $ echo 'a^c' | sed 's/^/b/'
     2400     ba^c
     2401
     2402     $ echo 'a^c' | sed 's/\x5e/b/'
     2403     ba^c
     2404
     2405   As are the following (‘0x5b’,‘0x5d’ are the hexadecimal ASCII values
     2406of ‘[’,‘]’, respectively):
     2407
     2408     $ echo abc | sed 's/[a]/x/'
     2409     Xbc
     2410     $ echo abc | sed 's/\x5ba\x5d/x/'
     2411     Xbc
     2412
     2413   However it is recommended to avoid such special characters due to
     2414unexpected edge-cases.  For example, the following are not equivalent:
     2415
     2416     $ echo 'a^c' | sed 's/\^/b/'
     2417     abc
     2418
     2419     $ echo 'a^c' | sed 's/\\\x5e/b/'
     2420     a^c
     2421
     2422   ---------- Footnotes ----------
     2423
     2424   (1) All the escapes introduced here are GNU extensions, with the
     2425exception of ‘\n’.  In basic regular expression mode, setting
     2426‘POSIXLY_CORRECT’ disables them inside bracket expressions.
     2427
     2428
     2429File: sed.info,  Node: Locale Considerations,  Prev: Escapes,  Up: sed regular expressions
     2430
     24315.9 Multibyte characters and Locale Considerations
     2432==================================================
     2433
     2434GNU ‘sed’ processes valid multibyte characters in multibyte locales
     2435(e.g.  ‘UTF-8’).  (1)
     2436
     2437The following example uses the Greek letter Capital Sigma (Σ, Unicode
     2438code point ‘0x03A3’).  In a ‘UTF-8’ locale, ‘sed’ correctly processes
     2439the Sigma as one character despite it being 2 octets (bytes):
     2440
     2441     $ locale | grep LANG
     2442     LANG=en_US.UTF-8
     2443
     2444     $ printf 'a\u03A3b'
     2445     aΣb
     2446
     2447     $ printf 'a\u03A3b' | sed 's/./X/g'
     2448     XXX
     2449
     2450     $ printf 'a\u03A3b' | od -tx1 -An
     2451      61 ce a3 62
     2452
     2453To force ‘sed’ to process octets separately, use the ‘C’ locale (also
     2454known as the ‘POSIX’ locale):
     2455
     2456     $ printf 'a\u03A3b' | LC_ALL=C sed 's/./X/g'
     2457     XXXX
     2458
     24595.9.1 Invalid multibyte characters
     2460----------------------------------
     2461
     2462‘sed’’s regular expressions _do not_ match invalid multibyte sequences
     2463in a multibyte locale.
     2464
     2465In the following examples, the ascii value ‘0xCE’ is an incomplete
     2466multibyte character (shown here as ᅵ).  The regular expression ‘.’ does
     2467not match it:
     2468
     2469     $ printf 'a\xCEb\n'
     2470     aᅵe
     2471
     2472     $ printf 'a\xCEb\n' | sed 's/./X/g'
     2473     XᅵX
     2474
     2475     $ printf 'a\xCEc\n' | sed 's/./X/g' | od -tx1c -An
     2476       58  ce  58  0a
     2477        X      X   \n
     2478
     2479Similarly, the ’catch-all’ regular expression ‘.*’ does not match the
     2480entire line:
     2481
     2482     $ printf 'a\xCEc\n' | sed 's/.*//' | od -tx1c -An
     2483       ce  63  0a
     2484            c  \n
     2485
     2486GNU ‘sed’ offers the special ‘z’ command to clear the current pattern
     2487space regardless of invalid multibyte characters (i.e.  it works like
     2488‘s/.*//’ but also removes invalid multibyte characters):
     2489
     2490     $ printf 'a\xCEc\n' | sed 'z' | od -tx1c -An
     2491        0a
     2492        \n
     2493
     2494Alternatively, force the ‘C’ locale to process each octet separately
     2495(every octet is a valid character in the ‘C’ locale):
     2496
     2497     $ printf 'a\xCEc\n' | LC_ALL=C sed 's/.*//' | od -tx1c -An
     2498       0a
     2499       \n
     2500
     2501   â€˜sed’’s inability to process invalid multibyte characters can be used
     2502to detect such invalid sequences in a file.  In the following examples,
     2503the ‘\xCE\xCE’ is an invalid multibyte sequence, while ‘\xCE\A3’ is a
     2504valid multibyte sequence (of the Greek Sigma character).
     2505
     2506The following ‘sed’ program removes all valid characters using ‘s/.//g’.
     2507Any content left in the pattern space (the invalid characters) are added
     2508to the hold space using the ‘H’ command.  On the last line (‘$’), the
     2509hold space is retrieved (‘x’), newlines are removed (‘s/\n//g’), and any
     2510remaining octets are printed unambiguously (‘l’).  Thus, any invalid
     2511multibyte sequences are printed as octal values:
     2512
     2513     $ printf 'ab\nc\n\xCE\xCEde\n\xCE\xA3f\n' > invalid.txt
     2514
     2515     $ cat invalid.txt
     2516     ab
     2517     c
     2518     ï¿œï¿œde
     2519     Î£f
     2520
     2521     $ sed -n 's/.//g ; H ; ${x;s/\n//g;l}' invalid.txt
     2522     \316\316$
     2523
     2524With a few more commands, ‘sed’ can print the exact line number
     2525corresponding to each invalid characters (line 3).  These characters can
     2526then be removed by forcing the ‘C’ locale and using octal escape
     2527sequences:
     2528
     2529     $ sed -n 's/.//g;=;l' invalid.txt | paste - -  | awk '$2!="$"'
     2530     3       \316\316$
     2531
     2532     $ LC_ALL=C sed '3s/\o316\o316//' invalid.txt > fixed.txt
     2533
     25345.9.2 Upper/Lower case conversion
     2535---------------------------------
     2536
     2537GNU ‘sed’’s substitute command (‘s’) supports upper/lower case
     2538conversions using ‘\U’,‘\L’ codes.  These conversions support multibyte
     2539characters:
     2540
     2541     $ printf 'ABC\u03a3\n'
     2542     ABCΣ
     2543
     2544     $ printf 'ABC\u03a3\n' | sed 's/.*/\L&/'
     2545     abcσ
     2546
     2547*Note The "s" Command::.
     2548
     25495.9.3 Multibyte regexp character classes
     2550----------------------------------------
     2551
     2552In other locales, the sorting sequence is not specified, and ‘[a-d]’
     2553might be equivalent to ‘[abcd]’ or to ‘[aBbCcDd]’, or it might fail to
     2554match any character, or the set of characters that it matches might even
     2555be erratic.  To obtain the traditional interpretation of bracket
     2556expressions, you can use the ‘C’ locale by setting the ‘LC_ALL’
     2557environment variable to the value ‘C’.
     2558
     2559     # TODO: is there any real-world system/locale where 'A'
     2560     #       is replaced by '-' ?
     2561     $ echo A | sed 's/[a-z]/-/'
     2562     A
     2563
     2564   Their interpretation depends on the ‘LC_CTYPE’ locale; for example,
     2565‘[[:alnum:]]’ means the character class of numbers and letters in the
     2566current locale.
     2567
     2568   TODO: show example of collation
     2569
     2570     # TODO: this works on glibc systems, not on musl-libc/freebsd/macosx.
     2571     $ printf 'cliché\n' | LC_ALL=fr_FR.utf8 sed 's/[[=e=]]/X/g'
     2572     clichX
     2573
     2574   ---------- Footnotes ----------
     2575
     2576   (1) Some regexp edge-cases depends on the operating system and libc
     2577implementation.  The examples shown are known to work as-expected on
     2578GNU/Linux systems using glibc.
     2579
     2580
     2581File: sed.info,  Node: advanced sed,  Next: Examples,  Prev: sed regular expressions,  Up: Top
     2582
     25836 Advanced ‘sed’: cycles and buffers
     2584************************************
     2585
     2586* Menu:
     2587
     2588* Execution Cycle::          How ‘sed’ works
     2589* Hold and Pattern Buffers::
     2590* Multiline techniques::     Using D,G,H,N,P to process multiple lines
     2591* Branching and flow control::
     2592
     2593
     2594File: sed.info,  Node: Execution Cycle,  Next: Hold and Pattern Buffers,  Up: advanced sed
     2595
     25966.1 How ‘sed’ Works
     2597===================
     2598
     2599‘sed’ maintains two data buffers: the active _pattern_ space, and the
     2600auxiliary _hold_ space.  Both are initially empty.
     2601
     2602   â€˜sed’ operates by performing the following cycle on each line of
     2603input: first, ‘sed’ reads one line from the input stream, removes any
     2604trailing newline, and places it in the pattern space.  Then commands are
     2605executed; each command can have an address associated to it: addresses
     2606are a kind of condition code, and a command is only executed if the
     2607condition is verified before the command is to be executed.
     2608
     2609   When the end of the script is reached, unless the ‘-n’ option is in
     2610use, the contents of pattern space are printed out to the output stream,
     2611adding back the trailing newline if it was removed.(1)  Then the next
     2612cycle starts for the next input line.
     2613
     2614   Unless special commands (like ‘D’) are used, the pattern space is
     2615deleted between two cycles.  The hold space, on the other hand, keeps
     2616its data between cycles (see commands ‘h’, ‘H’, ‘x’, ‘g’, ‘G’ to move
     2617data between both buffers).
     2618
     2619   ---------- Footnotes ----------
     2620
     2621   (1) Actually, if ‘sed’ prints a line without the terminating newline,
     2622it will nevertheless print the missing newline as soon as more text is
     2623sent to the same output stream, which gives the “least expected
     2624surprise” even though it does not make commands like ‘sed -n p’ exactly
     2625identical to ‘cat’.
     2626
     2627
     2628File: sed.info,  Node: Hold and Pattern Buffers,  Next: Multiline techniques,  Prev: Execution Cycle,  Up: advanced sed
     2629
     26306.2 Hold and Pattern Buffers
     2631============================
     2632
     2633TODO
     2634
     2635
     2636File: sed.info,  Node: Multiline techniques,  Next: Branching and flow control,  Prev: Hold and Pattern Buffers,  Up: advanced sed
     2637
     26386.3 Multiline techniques - using D,G,H,N,P to process multiple lines
     2639====================================================================
     2640
     2641Multiple lines can be processed as one buffer using the
     2642‘D’,‘G’,‘H’,‘N’,‘P’.  They are similar to their lowercase counterparts
     2643(‘d’,‘g’, ‘h’,‘n’,‘p’), except that these commands append or subtract
     2644data while respecting embedded newlines - allowing adding and removing
     2645lines from the pattern and hold spaces.
     2646
     2647   They operate as follows:
     2648‘D’
     2649     _deletes_ line from the pattern space until the first newline, and
     2650     restarts the cycle.
     2651
     2652‘G’
     2653     _appends_ line from the hold space to the pattern space, with a
     2654     newline before it.
     2655
     2656‘H’
     2657     _appends_ line from the pattern space to the hold space, with a
     2658     newline before it.
     2659
     2660‘N’
     2661     _appends_ line from the input file to the pattern space.
     2662
     2663‘P’
     2664     _prints_ line from the pattern space until the first newline.
     2665
     2666   The following example illustrates the operation of ‘N’ and ‘D’
     2667commands:
     2668
     2669     $ seq 6 | sed -n 'N;l;D'
     2670     1\n2$
     2671     2\n3$
     2672     3\n4$
     2673     4\n5$
     2674     5\n6$
     2675
     2676  1. ‘sed’ starts by reading the first line into the pattern space (i.e.
     2677     â€˜1’).
     2678  2. At the beginning of every cycle, the ‘N’ command appends a newline
     2679     and the next line to the pattern space (i.e.  ‘1’, ‘\n’, ‘2’ in the
     2680     first cycle).
     2681  3. The ‘l’ command prints the content of the pattern space
     2682     unambiguously.
     2683  4. The ‘D’ command then removes the content of pattern space up to the
     2684     first newline (leaving ‘2’ at the end of the first cycle).
     2685  5. At the next cycle the ‘N’ command appends a newline and the next
     2686     input line to the pattern space (e.g.  ‘2’, ‘\n’, ‘3’).
     2687
     2688   A common technique to process blocks of text such as paragraphs
     2689(instead of line-by-line) is using the following construct:
     2690
     2691     sed '/./{H;$!d} ; x ; s/REGEXP/REPLACEMENT/'
     2692
     2693  1. The first expression, ‘/./{H;$!d}’ operates on all non-empty lines,
     2694     and adds the current line (in the pattern space) to the hold space.
     2695     On all lines except the last, the pattern space is deleted and the
     2696     cycle is restarted.
     2697
     2698  2. The other expressions ‘x’ and ‘s’ are executed only on empty lines
     2699     (i.e.  paragraph separators).  The ‘x’ command fetches the
     2700     accumulated lines from the hold space back to the pattern space.
     2701     The ‘s///’ command then operates on all the text in the paragraph
     2702     (including the embedded newlines).
     2703
     2704   The following example demonstrates this technique:
     2705     $ cat input.txt
     2706     a a a aa aaa
     2707     aaaa aaaa aa
     2708     aaaa aaa aaa
     2709
     2710     bbbb bbb bbb
     2711     bb bb bbb bb
     2712     bbbbbbbb bbb
     2713
     2714     ccc ccc cccc
     2715     cccc ccccc c
     2716     cc cc cc cc
     2717
     2718     $ sed '/./{H;$!d} ; x ; s/^/\nSTART-->/ ; s/$/\n<--END/' input.txt
     2719
     2720     START-->
     2721     a a a aa aaa
     2722     aaaa aaaa aa
     2723     aaaa aaa aaa
     2724     <--END
     2725
     2726     START-->
     2727     bbbb bbb bbb
     2728     bb bb bbb bb
     2729     bbbbbbbb bbb
     2730     <--END
     2731
     2732     START-->
     2733     ccc ccc cccc
     2734     cccc ccccc c
     2735     cc cc cc cc
     2736     <--END
     2737
     2738   For more annotated examples, *note Text search across multiple
     2739lines:: and *note Line length adjustment::.
     2740
     2741
     2742File: sed.info,  Node: Branching and flow control,  Prev: Multiline techniques,  Up: advanced sed
     2743
     27446.4 Branching and Flow Control
     2745==============================
     2746
     2747The branching commands ‘b’, ‘t’, and ‘T’ enable changing the flow of
     2748‘sed’ programs.
     2749
     2750   By default, ‘sed’ reads an input line into the pattern buffer, then
     2751continues to processes all commands in order.  Commands without
     2752addresses affect all lines.  Commands with addresses affect only
     2753matching lines.  *Note Execution Cycle:: and *note Addresses overview::.
     2754
     2755   â€˜sed’ does not support a typical ‘if/then’ construct.  Instead, some
     2756commands can be used as conditionals or to change the default flow
     2757control:
     2758
     2759‘d’
     2760     delete (clears) the current pattern space, and restart the program
     2761     cycle without processing the rest of the commands and without
     2762     printing the pattern space.
     2763
     2764‘D’
     2765     delete the contents of the pattern space _up to the first newline_,
     2766     and restart the program cycle without processing the rest of the
     2767     commands and without printing the pattern space.
     2768
     2769‘[addr]X’
     2770‘[addr]{ X ; X ; X }’
     2771‘/regexp/X’
     2772‘/regexp/{ X ; X ; X }’
     2773     Addresses and regular expressions can be used as an ‘if/then’
     2774     conditional: If [ADDR] matches the current pattern space, execute
     2775     the command(s).  For example: The command ‘/^#/d’ means: _if_ the
     2776     current pattern matches the regular expression ‘^#’ (a line
     2777     starting with a hash), _then_ execute the ‘d’ command: delete the
     2778     line without printing it, and restart the program cycle
     2779     immediately.
     2780
     2781‘b’
     2782     branch unconditionally (that is: always jump to a label, skipping
     2783     or repeating other commands, without restarting a new cycle).
     2784     Combined with an address, the branch can be conditionally executed
     2785     on matched lines.
     2786
     2787‘t’
     2788     branch conditionally (that is: jump to a label) _only if_ a ‘s///’
     2789     command has succeeded since the last input line was read or another
     2790     conditional branch was taken.
     2791
     2792‘T’
     2793     similar but opposite to the ‘t’ command: branch only if there has
     2794     been _no_ successful substitutions since the last input line was
     2795     read.
     2796
     2797   The following two ‘sed’ programs are equivalent.  The first
     2798(contrived) example uses the ‘b’ command to skip the ‘s///’ command on
     2799lines containing ‘1’.  The second example uses an address with negation
     2800(‘!’) to perform substitution only on desired lines.  The ‘y///’ command
     2801is still executed on all lines:
     2802
     2803     $ printf '%s\n' a1 a2 a3 | sed -E '/1/bx ; s/a/z/ ; :x ; y/123/456/'
     2804     a4
     2805     z5
     2806     z6
     2807
     2808     $ printf '%s\n' a1 a2 a3 | sed -E '/1/!s/a/z/ ; y/123/456/'
     2809     a4
     2810     z5
     2811     z6
     2812
     28136.4.1 Branching and Cycles
     2814--------------------------
     2815
     2816The ‘b’,‘t’ and ‘T’ commands can be followed by a label (typically a
     2817single letter).  Labels are defined with a colon followed by one or more
     2818letters (e.g.  ‘:x’).  If the label is omitted the branch commands
     2819restart the cycle.  Note the difference between branching to a label and
     2820restarting the cycle: when a cycle is restarted, ‘sed’ first prints the
     2821current content of the pattern space, then reads the next input line
     2822into the pattern space; Jumping to a label (even if it is at the
     2823beginning of the program) does not print the pattern space and does not
     2824read the next input line.
     2825
     2826   The following program is a no-op.  The ‘b’ command (the only command
     2827in the program) does not have a label, and thus simply restarts the
     2828cycle.  On each cycle, the pattern space is printed and the next input
     2829line is read:
     2830
     2831     $ seq 3 | sed b
     2832     1
     2833     2
     2834     3
     2835
     2836   The following example is an infinite-loop - it doesn’t terminate and
     2837doesn’t print anything.  The ‘b’ command jumps to the ‘x’ label, and a
     2838new cycle is never started:
     2839
     2840     $ seq 3 | sed ':x ; bx'
     2841
     2842     # The above command requires gnu sed (which supports additional
     2843     # commands following a label, without a newline). A portable equivalent:
     2844     #     sed -e ':x' -e bx
     2845
     2846   Branching is often complemented with the ‘n’ or ‘N’ commands: both
     2847commands read the next input line into the pattern space without waiting
     2848for the cycle to restart.  Before reading the next input line, ‘n’
     2849prints the current pattern space then empties it, while ‘N’ appends a
     2850newline and the next input line to the pattern space.
     2851
     2852   Consider the following two examples:
     2853
     2854     $ seq 3 | sed ':x ; n ; bx'
     2855     1
     2856     2
     2857     3
     2858
     2859     $ seq 3 | sed ':x ; N ; bx'
     2860     1
     2861     2
     2862     3
     2863
     2864   â€¢ Both examples do not inf-loop, despite never starting a new cycle.
     2865
     2866   â€¢ In the first example, the ‘n’ commands first prints the content of
     2867     the pattern space, empties the pattern space then reads the next
     2868     input line.
     2869
     2870   â€¢ In the second example, the ‘N’ commands appends the next input line
     2871     to the pattern space (with a newline).  Lines are accumulated in
     2872     the pattern space until there are no more input lines to read, then
     2873     the ‘N’ command terminates the ‘sed’ program.  When the program
     2874     terminates, the end-of-cycle actions are performed, and the entire
     2875     pattern space is printed.
     2876
     2877   â€¢ The second example requires GNU ‘sed’, because it uses the
     2878     non-POSIX-standard behavior of ‘N’.  See the “‘N’ command on the
     2879     last line” paragraph in *note Reporting Bugs::.
     2880
     2881   â€¢ To further examine the difference between the two examples, try the
     2882     following commands:
     2883          printf '%s\n' aa bb cc dd | sed ':x ; n ; = ; bx'
     2884          printf '%s\n' aa bb cc dd | sed ':x ; N ; = ; bx'
     2885          printf '%s\n' aa bb cc dd | sed ':x ; n ; s/\n/***/ ; bx'
     2886          printf '%s\n' aa bb cc dd | sed ':x ; N ; s/\n/***/ ; bx'
     2887
     28886.4.2 Branching example: joining lines
     2889--------------------------------------
     2890
     2891As a real-world example of using branching, consider the case of
     2892quoted-printable (https://en.wikipedia.org/wiki/Quoted-printable) files,
     2893typically used to encode email messages.  In these files long lines are
     2894split and marked with a “soft line break” consisting of a single ‘=’
     2895character at the end of the line:
     2896
     2897     $ cat jaques.txt
     2898     All the wor=
     2899     ld's a stag=
     2900     e,
     2901     And all the=
     2902      men and wo=
     2903     men merely =
     2904     players:
     2905     They have t=
     2906     heir exits =
     2907     and their e=
     2908     ntrances;
     2909     And one man=
     2910      in his tim=
     2911     e plays man=
     2912     y parts.
     2913
     2914   The following program uses an address match ‘/=$/’ as a conditional:
     2915If the current pattern space ends with a ‘=’, it reads the next input
     2916line using ‘N’, replaces all ‘=’ characters which are followed by a
     2917newline, and unconditionally branches (‘b’) to the beginning of the
     2918program without restarting a new cycle.  If the pattern space does not
     2919ends with ‘=’, the default action is performed: the pattern space is
     2920printed and a new cycle is started:
     2921
     2922     $ sed ':x ; /=$/ { N ; s/=\n//g ; bx }' jaques.txt
     2923     All the world's a stage,
     2924     And all the men and women merely players:
     2925     They have their exits and their entrances;
     2926     And one man in his time plays many parts.
     2927
     2928   Here’s an alternative program with a slightly different approach: On
     2929all lines except the last, ‘N’ appends the line to the pattern space.  A
     2930substitution command then removes soft line breaks (‘=’ at the end of a
     2931line, i.e.  followed by a newline) by replacing them with an empty
     2932string.  _if_ the substitution was successful (meaning the pattern space
     2933contained a line which should be joined), The conditional branch command
     2934‘t’ jumps to the beginning of the program without completing or
     2935restarting the cycle.  If the substitution failed (meaning there were no
     2936soft line breaks), The ‘t’ command will _not_ branch.  Then, ‘P’ will
     2937print the pattern space content until the first newline, and ‘D’ will
     2938delete the pattern space content until the first new line.  (To learn
     2939more about ‘N’, ‘P’ and ‘D’ commands *note Multiline techniques::).
     2940
     2941     $ sed ':x ; $!N ; s/=\n// ; tx ; P ; D' jaques.txt
     2942     All the world's a stage,
     2943     And all the men and women merely players:
     2944     They have their exits and their entrances;
     2945     And one man in his time plays many parts.
     2946
     2947   For more line-joining examples *note Joining lines::.
     2948
     2949
     2950File: sed.info,  Node: Examples,  Next: Limitations,  Prev: advanced sed,  Up: Top
     2951
     29527 Some Sample Scripts
     2953*********************
     2954
     2955Here are some ‘sed’ scripts to guide you in the art of mastering ‘sed’.
     2956
     2957* Menu:
     2958
     2959
     2960Useful one-liners:
     2961* Joining lines::
     2962
     2963Some exotic examples:
     2964* Centering lines::
     2965* Increment a number::
     2966* Rename files to lower case::
     2967* Print bash environment::
     2968* Reverse chars of lines::
     2969* Text search across multiple lines::
     2970* Line length adjustment::
     2971* Adding a header to multiple files::
     2972
     2973Emulating standard utilities:
     2974* tac::                             Reverse lines of files
     2975* cat -n::                          Numbering lines
     2976* cat -b::                          Numbering non-blank lines
     2977* wc -c::                           Counting chars
     2978* wc -w::                           Counting words
     2979* wc -l::                           Counting lines
     2980* head::                            Printing the first lines
     2981* tail::                            Printing the last lines
     2982* uniq::                            Make duplicate lines unique
     2983* uniq -d::                         Print duplicated lines of input
     2984* uniq -u::                         Remove all duplicated lines
     2985* cat -s::                          Squeezing blank lines
     2986
     2987
     2988File: sed.info,  Node: Joining lines,  Next: Centering lines,  Up: Examples
     2989
     29907.1 Joining lines
     2991=================
     2992
     2993This section uses ‘N’, ‘D’ and ‘P’ commands to process multiple lines,
     2994and the ‘b’ and ‘t’ commands for branching.  *Note Multiline
     2995techniques:: and *note Branching and flow control::.
     2996
     2997   Join specific lines (e.g.  if lines 2 and 3 need to be joined):
     2998
     2999     $ cat lines.txt
     3000     hello
     3001     hel
     3002     lo
     3003     hello
     3004
     3005     $ sed '2{N;s/\n//;}' lines.txt
     3006     hello
     3007     hello
     3008     hello
     3009
     3010   Join backslash-continued lines:
     3011
     3012     $ cat 1.txt
     3013     this \
     3014     is \
     3015     a \
     3016     long \
     3017     line
     3018     and another \
     3019     line
     3020
     3021     $ sed -e ':x /\\$/ { N; s/\\\n//g ; bx }'  1.txt
     3022     this is a long line
     3023     and another line
     3024
     3025
     3026     #TODO: The above requires gnu sed.
     3027     #      non-gnu seds need newlines after ':' and 'b'
     3028
     3029   Join lines that start with whitespace (e.g SMTP headers):
     3030
     3031     $ cat 2.txt
     3032     Subject: Hello
     3033         World
     3034     Content-Type: multipart/alternative;
     3035         boundary=94eb2c190cc6370f06054535da6a
     3036     Date: Tue, 3 Jan 2017 19:41:16 +0000 (GMT)
     3037     Authentication-Results: mx.gnu.org;
     3038            dkim=pass header.i=@gnu.org;
     3039            spf=pass
     3040     Message-ID: <abcdef@gnu.org>
     3041     From: John Doe <jdoe@gnu.org>
     3042     To: Jane Smith <jsmith@gnu.org>
     3043
     3044     $ sed -E ':a ; $!N ; s/\n\s+/ / ; ta ; P ; D' 2.txt
     3045     Subject: Hello World
     3046     Content-Type: multipart/alternative; boundary=94eb2c190cc6370f06054535da6a
     3047     Date: Tue, 3 Jan 2017 19:41:16 +0000 (GMT)
     3048     Authentication-Results: mx.gnu.org; dkim=pass header.i=@gnu.org; spf=pass
     3049     Message-ID: <abcdef@gnu.org>
     3050     From: John Doe <jdoe@gnu.org>
     3051     To: Jane Smith <jsmith@gnu.org>
     3052
     3053     # A portable (non-gnu) variation:
     3054     #   sed -e :a -e '$!N;s/\n  */ /;ta' -e 'P;D'
     3055
     3056
     3057File: sed.info,  Node: Centering lines,  Next: Increment a number,  Prev: Joining lines,  Up: Examples
     3058
     30597.2 Centering Lines
     3060===================
     3061
     3062This script centers all lines of a file on a 80 columns width.  To
     3063change that width, the number in ‘\{...\}’ must be replaced, and the
     3064number of added spaces also must be changed.
     3065
     3066   Note how the buffer commands are used to separate parts in the
     3067regular expressions to be matched—this is a common technique.
     3068
     3069     #!/usr/bin/sed -f
     3070
     3071     # Put 80 spaces in the buffer
     3072     1 {
     3073       x
     3074       s/^$/          /
     3075       s/^.*$/&&&&&&&&/
     3076       x
     3077     }
     3078
     3079     # delete leading and trailing spaces
     3080     y/<TAB>/ /
     3081     s/^ *//
     3082     s/ *$//
     3083
     3084     # add a newline and 80 spaces to end of line
     3085     G
     3086
     3087     # keep first 81 chars (80 + a newline)
     3088     s/^\(.\{81\}\).*$/\1/
     3089
     3090     # \2 matches half of the spaces, which are moved to the beginning
     3091     s/^\(.*\)\n\(.*\)\2/\2\1/
     3092
     3093
     3094File: sed.info,  Node: Increment a number,  Next: Rename files to lower case,  Prev: Centering lines,  Up: Examples
     3095
     30967.3 Increment a Number
     3097======================
     3098
     3099This script is one of a few that demonstrate how to do arithmetic in
     3100‘sed’.  This is indeed possible,(1) but must be done manually.
     3101
     3102   To increment one number you just add 1 to last digit, replacing it by
     3103the following digit.  There is one exception: when the digit is a nine
     3104the previous digits must be also incremented until you don’t have a
     3105nine.
     3106
     3107   This solution by Bruno Haible is very clever and smart because it
     3108uses a single buffer; if you don’t have this limitation, the algorithm
     3109used in *note Numbering lines: cat -n, is faster.  It works by replacing
     3110trailing nines with an underscore, then using multiple ‘s’ commands to
     3111increment the last digit, and then again substituting underscores with
     3112zeros.
     3113
     3114     #!/usr/bin/sed -f
     3115
     3116     /[^0-9]/ d
     3117
     3118     # replace all trailing 9s by _ (any other character except digits, could
     3119     # be used)
     3120     :d
     3121     s/9\(_*\)$/_\1/
     3122     td
     3123
     3124     # incr last digit only.  The first line adds a most-significant
     3125     # digit of 1 if we have to add a digit.
     3126
     3127     s/^\(_*\)$/1\1/; tn
     3128     s/8\(_*\)$/9\1/; tn
     3129     s/7\(_*\)$/8\1/; tn
     3130     s/6\(_*\)$/7\1/; tn
     3131     s/5\(_*\)$/6\1/; tn
     3132     s/4\(_*\)$/5\1/; tn
     3133     s/3\(_*\)$/4\1/; tn
     3134     s/2\(_*\)$/3\1/; tn
     3135     s/1\(_*\)$/2\1/; tn
     3136     s/0\(_*\)$/1\1/; tn
     3137
     3138     :n
     3139     y/_/0/
     3140
     3141   ---------- Footnotes ----------
     3142
     3143   (1) ‘sed’ guru Greg Ubben wrote an implementation of the ‘dc’ RPN
     3144calculator!  It is distributed together with sed.
     3145
     3146
     3147File: sed.info,  Node: Rename files to lower case,  Next: Print bash environment,  Prev: Increment a number,  Up: Examples
     3148
     31497.4 Rename Files to Lower Case
     3150==============================
     3151
     3152This is a pretty strange use of ‘sed’.  We transform text, and transform
     3153it to be shell commands, then just feed them to shell.  Don’t worry,
     3154even worse hacks are done when using ‘sed’; I have seen a script
     3155converting the output of ‘date’ into a ‘bc’ program!
     3156
     3157   The main body of this is the ‘sed’ script, which remaps the name from
     3158lower to upper (or vice-versa) and even checks out if the remapped name
     3159is the same as the original name.  Note how the script is parameterized
     3160using shell variables and proper quoting.
     3161
     3162     #! /bin/sh
     3163     # rename files to lower/upper case...
     3164     #
     3165     # usage:
     3166     #    move-to-lower *
     3167     #    move-to-upper *
     3168     # or
     3169     #    move-to-lower -R .
     3170     #    move-to-upper -R .
     3171     #
     3172
     3173     help()
     3174     {
     3175             cat << eof
     3176     Usage: $0 [-n] [-r] [-h] files...
     3177
     3178     -n      do nothing, only see what would be done
     3179     -R      recursive (use find)
     3180     -h      this message
     3181     files   files to remap to lower case
     3182
     3183     Examples:
     3184            $0 -n *        (see if everything is ok, then...)
     3185            $0 *
     3186
     3187            $0 -R .
     3188
     3189     eof
     3190     }
     3191
     3192     apply_cmd='sh'
     3193     finder='echo "$@" | tr " " "\n"'
     3194     files_only=
     3195
     3196     while :
     3197     do
     3198         case "$1" in
     3199             -n) apply_cmd='cat' ;;
     3200             -R) finder='find "$@" -type f';;
     3201             -h) help ; exit 1 ;;
     3202             *) break ;;
     3203         esac
     3204         shift
     3205     done
     3206
     3207     if [ -z "$1" ]; then
     3208             echo Usage: $0 [-h] [-n] [-r] files...
     3209             exit 1
     3210     fi
     3211
     3212     LOWER='abcdefghijklmnopqrstuvwxyz'
     3213     UPPER='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
     3214
     3215     case `basename $0` in
     3216             *upper*) TO=$UPPER; FROM=$LOWER ;;
     3217             *)       FROM=$UPPER; TO=$LOWER ;;
     3218     esac
     3219
     3220     eval $finder | sed -n '
     3221
     3222     # remove all trailing slashes
     3223     s/\/*$//
     3224
     3225     # add ./ if there is no path, only a filename
     3226     /\//! s/^/.\//
     3227
     3228     # save path+filename
     3229     h
     3230
     3231     # remove path
     3232     s/.*\///
     3233
     3234     # do conversion only on filename
     3235     y/'$FROM'/'$TO'/
     3236
     3237     # now line contains original path+file, while
     3238     # hold space contains the new filename
     3239     x
     3240
     3241     # add converted file name to line, which now contains
     3242     # path/file-name\nconverted-file-name
     3243     G
     3244
     3245     # check if converted file name is equal to original file name,
     3246     # if it is, do not print anything
     3247     /^.*\/\(.*\)\n\1/b
     3248
     3249     # escape special characters for the shell
     3250     s/["$`\\]/\\&/g
     3251
     3252     # now, transform path/fromfile\n, into
     3253     # mv path/fromfile path/tofile and print it
     3254     s/^\(.*\/\)\(.*\)\n\(.*\)$/mv "\1\2" "\1\3"/p
     3255
     3256     ' | $apply_cmd
     3257
     3258
     3259File: sed.info,  Node: Print bash environment,  Next: Reverse chars of lines,  Prev: Rename files to lower case,  Up: Examples
     3260
     32617.5 Print ‘bash’ Environment
     3262============================
     3263
     3264This script strips the definition of the shell functions from the output
     3265of the ‘set’ Bourne-shell command.
     3266
     3267     #!/bin/sh
     3268
     3269     set | sed -n '
     3270     :x
     3271
     3272     # if no occurrence of "=()" print and load next line
     3273     /=()/! { p; b; }
     3274     / () $/! { p; b; }
     3275
     3276     # possible start of functions section
     3277     # save the line in case this is a var like FOO="() "
     3278     h
     3279
     3280     # if the next line has a brace, we quit because
     3281     # nothing comes after functions
     3282     n
     3283     /^{/ q
     3284
     3285     # print the old line
     3286     x; p
     3287
     3288     # work on the new line now
     3289     x; bx
     3290     '
     3291
     3292
     3293File: sed.info,  Node: Reverse chars of lines,  Next: Text search across multiple lines,  Prev: Print bash environment,  Up: Examples
     3294
     32957.6 Reverse Characters of Lines
     3296===============================
     3297
     3298This script can be used to reverse the position of characters in lines.
     3299The technique moves two characters at a time, hence it is faster than
     3300more intuitive implementations.
     3301
     3302   Note the ‘tx’ command before the definition of the label.  This is
     3303often needed to reset the flag that is tested by the ‘t’ command.
     3304
     3305   Imaginative readers will find uses for this script.  An example is
     3306reversing the output of ‘banner’.(1)
     3307
     3308     #!/usr/bin/sed -f
     3309
     3310     /../! b
     3311
     3312     # Reverse a line.  Begin embedding the line between two newlines
     3313     s/^.*$/\
     3314     &\
     3315     /
     3316
     3317     # Move first character at the end.  The regexp matches until
     3318     # there are zero or one characters between the markers
     3319     tx
     3320     :x
     3321     s/\(\n.\)\(.*\)\(.\n\)/\3\2\1/
     3322     tx
     3323
     3324     # Remove the newline markers
     3325     s/\n//g
     3326
     3327   ---------- Footnotes ----------
     3328
     3329   (1) This requires another script to pad the output of banner; for
     3330example
     3331
     3332     #! /bin/sh
     3333
     3334     banner -w $1 $2 $3 $4 |
     3335       sed -e :a -e '/^.\{0,'$1'\}$/ { s/$/ /; ba; }' |
     3336       ~/sedscripts/reverseline.sed
     3337
     3338
     3339File: sed.info,  Node: Text search across multiple lines,  Next: Line length adjustment,  Prev: Reverse chars of lines,  Up: Examples
     3340
     33417.7 Text search across multiple lines
     3342=====================================
     3343
     3344This section uses ‘N’ and ‘D’ commands to search for consecutive words
     3345spanning multiple lines.  *Note Multiline techniques::.
     3346
     3347   These examples deal with finding doubled occurrences of words in a
     3348document.
     3349
     3350   Finding doubled words in a single line is easy using GNU ‘grep’ and
     3351similarly with GNU ‘sed’:
     3352
     3353     $ cat two-cities-dup1.txt
     3354     It was the best of times,
     3355     it was the worst of times,
     3356     it was the the age of wisdom,
     3357     it was the age of foolishness,
     3358
     3359     $ grep -E '\b(\w+)\s+\1\b' two-cities-dup1.txt
     3360     it was the the age of wisdom,
     3361
     3362     $ grep -n -E '\b(\w+)\s+\1\b' two-cities-dup1.txt
     3363     3:it was the the age of wisdom,
     3364
     3365     $ sed -En '/\b(\w+)\s+\1\b/p' two-cities-dup1.txt
     3366     it was the the age of wisdom,
     3367
     3368     $ sed -En '/\b(\w+)\s+\1\b/{=;p}' two-cities-dup1.txt
     3369     3
     3370     it was the the age of wisdom,
     3371
     3372   â€¢ The regular expression ‘\b\w+\s+’ searches for word-boundary
     3373     (‘\b’), followed by one-or-more word-characters (‘\w+’), followed
     3374     by whitespace (‘\s+’).  *Note regexp extensions::.
     3375
     3376   â€¢ Adding parentheses around the ‘(\w+)’ expression creates a
     3377     subexpression.  The regular expression pattern ‘(PATTERN)\s+\1’
     3378     defines a subexpression (in the parentheses) followed by a
     3379     back-reference, separated by whitespace.  A successful match means
     3380     the PATTERN was repeated twice in succession.  *Note
     3381     Back-references and Subexpressions::.
     3382
     3383   â€¢ The word-boundery expression (‘\b’) at both ends ensures partial
     3384     words are not matched (e.g.  ‘the then’ is not a desired match).
     3385
     3386   â€¢ The ‘-E’ option enables extended regular expression syntax,
     3387     alleviating the need to add backslashes before the parenthesis.
     3388     *Note ERE syntax::.
     3389
     3390   When the doubled word span two lines the above regular expression
     3391will not find them as ‘grep’ and ‘sed’ operate line-by-line.
     3392
     3393   By using ‘N’ and ‘D’ commands, ‘sed’ can apply regular expressions on
     3394multiple lines (that is, multiple lines are stored in the pattern space,
     3395and the regular expression works on it):
     3396
     3397     $ cat two-cities-dup2.txt
     3398     It was the best of times, it was the
     3399     worst of times, it was the
     3400     the age of wisdom,
     3401     it was the age of foolishness,
     3402
     3403     $ sed -En '{N; /\b(\w+)\s+\1\b/{=;p} ; D}'  two-cities-dup2.txt
     3404     3
     3405     worst of times, it was the
     3406     the age of wisdom,
     3407
     3408   â€¢ The ‘N’ command appends the next line to the pattern space (thus
     3409     ensuring it contains two consecutive lines in every cycle).
     3410
     3411   â€¢ The regular expression uses ‘\s+’ for word separator which matches
     3412     both spaces and newlines.
     3413
     3414   â€¢ The regular expression matches, the entire pattern space is printed
     3415     with ‘p’.  No lines are printed by default due to the ‘-n’ option.
     3416
     3417   â€¢ The ‘D’ removes the first line from the pattern space (up until the
     3418     first newline), readying it for the next cycle.
     3419
     3420   See the GNU ‘coreutils’ manual for an alternative solution using ‘tr
     3421-s’ and ‘uniq’ at
     3422<https://gnu.org/s/coreutils/manual/html_node/Squeezing-and-deleting.html>.
     3423
     3424
     3425File: sed.info,  Node: Line length adjustment,  Next: Adding a header to multiple files,  Prev: Text search across multiple lines,  Up: Examples
     3426
     34277.8 Line length adjustment
     3428==========================
     3429
     3430This section uses ‘N’ and ‘P’ commands to read and write lines, and the
     3431‘b’ command for branching.  *Note Multiline techniques:: and *note
     3432Branching and flow control::.
     3433
     3434   This (somewhat contrived) example deal with formatting and wrapping
     3435lines of text of the following input file:
     3436
     3437     $ cat two-cities-mix.txt
     3438     It was the best of times, it was
     3439     the worst of times, it
     3440     was the age of
     3441     wisdom,
     3442     it
     3443     was
     3444     the age
     3445     of foolishness,
     3446
     3447The following sed program wraps lines at 40 characters:
     3448     $ cat wrap40.sed
     3449     # outer loop
     3450     :x
     3451
     3452     # Append a newline followed by the next input line to the pattern buffer
     3453     N
     3454
     3455     # Remove all newlines from the pattern buffer
     3456     s/\n/ /g
     3457
     3458
     3459     # Inner loop
     3460     :y
     3461
     3462     # Add a newline after the first 40 characters
     3463     s/(.{40,40})/\1\n/
     3464
     3465     # If there is a newline in the pattern buffer
     3466     # (i.e. the previous substitution added a newline)
     3467     /\n/ {
     3468         # There are newlines in the pattern buffer -
     3469         # print the content until the first newline.
     3470         P
     3471
     3472        # Remove the printed characters and the first newline
     3473        s/.*\n//
     3474
     3475        # branch to label 'y' - repeat inner loop
     3476        by
     3477      }
     3478
     3479     # No newlines in the pattern buffer - Branch to label 'x' (outer loop)
     3480     # and read the next input line
     3481     bx
     3482
     3483The wrapped output:
     3484     $ sed -E -f wrap40.sed two-cities-mix.txt
     3485     It was the best of times, it was the wor
     3486     st of times, it was the age of wisdom, i
     3487     t was the age of foolishness,
     3488
     3489
     3490File: sed.info,  Node: Adding a header to multiple files,  Next: tac,  Prev: Line length adjustment,  Up: Examples
     3491
     34927.9 Adding a header to multiple files
     3493=====================================
     3494
     3495GNU ‘sed’ can be used to safely modify multiple files at once.
     3496
     3497Add a single line to the beginning of source code files:
     3498
     3499     sed -i '1i/* Copyright (C) FOO BAR */' *.c
     3500
     3501Adding a few lines is possible using ‘\n’ in the text:
     3502
     3503     sed -i '1i/*\n * Copyright (C) FOO BAR\n * Created by Jane Doe\n */' *.c
     3504
     3505   To add multiple lines from another file, use ‘0rFILE’.  A typical use
     3506case is adding a license notice header to all files:
     3507
     3508     ## Create the header file:
     3509     $ cat<<'EOF'>LIC.TXT
     3510     /*
     3511         Copyright (C) 1989-2021 FOO BAR
     3512
     3513         This program is free software; you can redistribute it and/or modify
     3514         it under the terms of the GNU General Public License as published by
     3515         the Free Software Foundation; either version 3, or (at your option)
     3516         any later version.
     3517
     3518         This program is distributed in the hope that it will be useful,
     3519         but WITHOUT ANY WARRANTY; without even the implied warranty of
     3520         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     3521         GNU General Public License for more details.
     3522
     3523         You should have received a copy of the GNU General Public License
     3524         along with this program; If not, see <https://www.gnu.org/licenses/>.
     3525     */
     3526     EOF
     3527
     3528     ## Add the file at the beginning of all source code files:
     3529     $ sed -i '0rLIC.TXT' *.cpp *.h
     3530
     3531   With script files (e.g.  ‘.sh’,‘.py’,‘.pl’ files) the license notice
     3532typically appears _after_ the first line (the ’shebang’ ‘#!’ line).  The
     3533‘1rFILE’ command will add ‘FILE’ _after_ the first line:
     3534
     3535     ## Create the header file:
     3536     $ cat<<'EOF'>LIC.TXT
     3537     ##
     3538     ## Copyright (C) 1989-2021 FOO BAR
     3539     ##
     3540     ## This program is free software; you can redistribute it and/or modify
     3541     ## it under the terms of the GNU General Public License as published by
     3542     ## the Free Software Foundation; either version 3, or (at your option)
     3543     ## any later version.
     3544     ##
     3545     ## This program is distributed in the hope that it will be useful,
     3546     ## but WITHOUT ANY WARRANTY; without even the implied warranty of
     3547     ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     3548     ## GNU General Public License for more details.
     3549     ##
     3550     ## You should have received a copy of the GNU General Public License
     3551     ## along with this program; If not, see <https://www.gnu.org/licenses/>.
     3552     ##
     3553     ##
     3554     EOF
     3555
     3556     ## Add the file at the beginning of all source code files:
     3557     $ sed -i '1rLIC.TXT' *.py *.sh
     3558
     3559   The above ‘sed’ commands can be combined with ‘find’ to locate files
     3560in all subdirectories, ‘xargs’ to run additional commands on selected
     3561files and ‘grep’ to filter out files that already contain a copyright
     3562notice:
     3563
     3564     find \( -iname '*.cpp' -o -iname '*.c' -o -iname '*.h' \) \
     3565         | xargs grep -Li copyright \
     3566         | xargs -r sed -i '0rLIC.TXT'
     3567
     3568Or a slightly safe version (handling files with spaces and newlines):
     3569
     3570     find \( -iname '*.cpp' -o -iname '*.c' -o -iname '*.h' \) -print0 \
     3571         | xargs -0 grep -Z -Li copyright \
     3572         | xargs -0 -r sed -i '0rLIC.TXT'
     3573
     3574   Note: using the ‘0’ address with ‘r’ command requires GNU ‘sed’
     3575version 4.9 or later.  *Note Zero Address::.
     3576
     3577
     3578File: sed.info,  Node: tac,  Next: cat -n,  Prev: Adding a header to multiple files,  Up: Examples
     3579
     35807.10 Reverse Lines of Files
     3581===========================
     3582
     3583This one begins a series of totally useless (yet interesting) scripts
     3584emulating various Unix commands.  This, in particular, is a ‘tac’
     3585workalike.
     3586
     3587   Note that on implementations other than GNU ‘sed’ this script might
     3588easily overflow internal buffers.
     3589
     3590     #!/usr/bin/sed -nf
     3591
     3592     # reverse all lines of input, i.e. first line became last, ...
     3593
     3594     # from the second line, the buffer (which contains all previous lines)
     3595     # is *appended* to current line, so, the order will be reversed
     3596     1! G
     3597
     3598     # on the last line we're done -- print everything
     3599     $ p
     3600
     3601     # store everything on the buffer again
     3602     h
     3603
     3604
     3605File: sed.info,  Node: cat -n,  Next: cat -b,  Prev: tac,  Up: Examples
     3606
     36077.11 Numbering Lines
     3608====================
     3609
     3610This script replaces ‘cat -n’; in fact it formats its output exactly
     3611like GNU ‘cat’ does.
     3612
     3613   Of course this is completely useless and for two reasons: first,
     3614because somebody else did it in C, second, because the following
     3615Bourne-shell script could be used for the same purpose and would be much
     3616faster:
     3617
     3618     #! /bin/sh
     3619     sed -e "=" $@ | sed -e '
     3620       s/^/      /
     3621       N
     3622       s/^ *\(......\)\n/\1  /
     3623     '
     3624
     3625   It uses ‘sed’ to print the line number, then groups lines two by two
     3626using ‘N’.  Of course, this script does not teach as much as the one
     3627presented below.
     3628
     3629   The algorithm used for incrementing uses both buffers, so the line is
     3630printed as soon as possible and then discarded.  The number is split so
     3631that changing digits go in a buffer and unchanged ones go in the other;
     3632the changed digits are modified in a single step (using a ‘y’ command).
     3633The line number for the next line is then composed and stored in the
     3634hold space, to be used in the next iteration.
     3635
     3636     #!/usr/bin/sed -nf
     3637
     3638     # Prime the pump on the first line
     3639     x
     3640     /^$/ s/^.*$/1/
     3641
     3642     # Add the correct line number before the pattern
     3643     G
     3644     h
     3645
     3646     # Format it and print it
     3647     s/^/      /
     3648     s/^ *\(......\)\n/\1  /p
     3649
     3650     # Get the line number from hold space; add a zero
     3651     # if we're going to add a digit on the next line
     3652     g
     3653     s/\n.*$//
     3654     /^9*$/ s/^/0/
     3655
     3656     # separate changing/unchanged digits with an x
     3657     s/.9*$/x&/
     3658
     3659     # keep changing digits in hold space
     3660     h
     3661     s/^.*x//
     3662     y/0123456789/1234567890/
     3663     x
     3664
     3665     # keep unchanged digits in pattern space
     3666     s/x.*$//
     3667
     3668     # compose the new number, remove the newline implicitly added by G
     3669     G
     3670     s/\n//
     3671     h
     3672
     3673
     3674File: sed.info,  Node: cat -b,  Next: wc -c,  Prev: cat -n,  Up: Examples
     3675
     36767.12 Numbering Non-blank Lines
     3677==============================
     3678
     3679Emulating ‘cat -b’ is almost the same as ‘cat -n’—we only have to select
     3680which lines are to be numbered and which are not.
     3681
     3682   The part that is common to this script and the previous one is not
     3683commented to show how important it is to comment ‘sed’ scripts
     3684properly...
     3685
     3686     #!/usr/bin/sed -nf
     3687
     3688     /^$/ {
     3689       p
     3690       b
     3691     }
     3692
     3693     # Same as cat -n from now
     3694     x
     3695     /^$/ s/^.*$/1/
     3696     G
     3697     h
     3698     s/^/      /
     3699     s/^ *\(......\)\n/\1  /p
     3700     x
     3701     s/\n.*$//
     3702     /^9*$/ s/^/0/
     3703     s/.9*$/x&/
     3704     h
     3705     s/^.*x//
     3706     y/0123456789/1234567890/
     3707     x
     3708     s/x.*$//
     3709     G
     3710     s/\n//
     3711     h
     3712
     3713
     3714File: sed.info,  Node: wc -c,  Next: wc -w,  Prev: cat -b,  Up: Examples
     3715
     37167.13 Counting Characters
     3717========================
     3718
     3719This script shows another way to do arithmetic with ‘sed’.  In this case
     3720we have to add possibly large numbers, so implementing this by
     3721successive increments would not be feasible (and possibly even more
     3722complicated to contrive than this script).
     3723
     3724   The approach is to map numbers to letters, kind of an abacus
     3725implemented with ‘sed’.  ‘a’s are units, ‘b’s are tens and so on: we
     3726simply add the number of characters on the current line as units, and
     3727then propagate the carry to tens, hundreds, and so on.
     3728
     3729   As usual, running totals are kept in hold space.
     3730
     3731   On the last line, we convert the abacus form back to decimal.  For
     3732the sake of variety, this is done with a loop rather than with some 80
     3733‘s’ commands(1): first we convert units, removing ‘a’s from the number;
     3734then we rotate letters so that tens become ‘a’s, and so on until no more
     3735letters remain.
     3736
     3737     #!/usr/bin/sed -nf
     3738
     3739     # Add n+1 a's to hold space (+1 is for the newline)
     3740     s/./a/g
     3741     H
     3742     x
     3743     s/\n/a/
     3744
     3745     # Do the carry.  The t's and b's are not necessary,
     3746     # but they do speed up the thing
     3747     t a
     3748     : a;  s/aaaaaaaaaa/b/g; t b; b done
     3749     : b;  s/bbbbbbbbbb/c/g; t c; b done
     3750     : c;  s/cccccccccc/d/g; t d; b done
     3751     : d;  s/dddddddddd/e/g; t e; b done
     3752     : e;  s/eeeeeeeeee/f/g; t f; b done
     3753     : f;  s/ffffffffff/g/g; t g; b done
     3754     : g;  s/gggggggggg/h/g; t h; b done
     3755     : h;  s/hhhhhhhhhh//g
     3756
     3757     : done
     3758     $! {
     3759       h
     3760       b
     3761     }
     3762
     3763     # On the last line, convert back to decimal
     3764
     3765     : loop
     3766     /a/! s/[b-h]*/&0/
     3767     s/aaaaaaaaa/9/
     3768     s/aaaaaaaa/8/
     3769     s/aaaaaaa/7/
     3770     s/aaaaaa/6/
     3771     s/aaaaa/5/
     3772     s/aaaa/4/
     3773     s/aaa/3/
     3774     s/aa/2/
     3775     s/a/1/
     3776
     3777     : next
     3778     y/bcdefgh/abcdefg/
     3779     /[a-h]/ b loop
     3780     p
     3781
     3782   ---------- Footnotes ----------
     3783
     3784   (1) Some implementations have a limit of 199 commands per script
     3785
     3786
     3787File: sed.info,  Node: wc -w,  Next: wc -l,  Prev: wc -c,  Up: Examples
     3788
     37897.14 Counting Words
     3790===================
     3791
     3792This script is almost the same as the previous one, once each of the
     3793words on the line is converted to a single ‘a’ (in the previous script
     3794each letter was changed to an ‘a’).
     3795
     3796   It is interesting that real ‘wc’ programs have optimized loops for
     3797‘wc -c’, so they are much slower at counting words rather than
     3798characters.  This script’s bottleneck, instead, is arithmetic, and hence
     3799the word-counting one is faster (it has to manage smaller numbers).
     3800
     3801   Again, the common parts are not commented to show the importance of
     3802commenting ‘sed’ scripts.
     3803
     3804     #!/usr/bin/sed -nf
     3805
     3806     # Convert words to a's
     3807     s/[ <TAB>][ <TAB>]*/ /g
     3808     s/^/ /
     3809     s/ [^ ][^ ]*/a /g
     3810     s/ //g
     3811
     3812     # Append them to hold space
     3813     H
     3814     x
     3815     s/\n//
     3816
     3817     # From here on it is the same as in wc -c.
     3818     /aaaaaaaaaa/! bx;   s/aaaaaaaaaa/b/g
     3819     /bbbbbbbbbb/! bx;   s/bbbbbbbbbb/c/g
     3820     /cccccccccc/! bx;   s/cccccccccc/d/g
     3821     /dddddddddd/! bx;   s/dddddddddd/e/g
     3822     /eeeeeeeeee/! bx;   s/eeeeeeeeee/f/g
     3823     /ffffffffff/! bx;   s/ffffffffff/g/g
     3824     /gggggggggg/! bx;   s/gggggggggg/h/g
     3825     s/hhhhhhhhhh//g
     3826     :x
     3827     $! { h; b; }
     3828     :y
     3829     /a/! s/[b-h]*/&0/
     3830     s/aaaaaaaaa/9/
     3831     s/aaaaaaaa/8/
     3832     s/aaaaaaa/7/
     3833     s/aaaaaa/6/
     3834     s/aaaaa/5/
     3835     s/aaaa/4/
     3836     s/aaa/3/
     3837     s/aa/2/
     3838     s/a/1/
     3839     y/bcdefgh/abcdefg/
     3840     /[a-h]/ by
     3841     p
     3842
     3843
     3844File: sed.info,  Node: wc -l,  Next: head,  Prev: wc -w,  Up: Examples
     3845
     38467.15 Counting Lines
     3847===================
     3848
     3849No strange things are done now, because ‘sed’ gives us ‘wc -l’
     3850functionality for free!!!  Look:
     3851
     3852     #!/usr/bin/sed -nf
     3853     $=
     3854
     3855
     3856File: sed.info,  Node: head,  Next: tail,  Prev: wc -l,  Up: Examples
     3857
     38587.16 Printing the First Lines
     3859=============================
     3860
     3861This script is probably the simplest useful ‘sed’ script.  It displays
     3862the first 10 lines of input; the number of displayed lines is right
     3863before the ‘q’ command.
     3864
     3865     #!/usr/bin/sed -f
     3866     10q
     3867
     3868
     3869File: sed.info,  Node: tail,  Next: uniq,  Prev: head,  Up: Examples
     3870
     38717.17 Printing the Last Lines
     3872============================
     3873
     3874Printing the last N lines rather than the first is more complex but
     3875indeed possible.  N is encoded in the second line, before the bang
     3876character.
     3877
     3878   This script is similar to the ‘tac’ script in that it keeps the final
     3879output in the hold space and prints it at the end:
     3880
     3881     #!/usr/bin/sed -nf
     3882
     3883     1! {; H; g; }
     3884     1,10 !s/[^\n]*\n//
     3885     $p
     3886     h
     3887
     3888   Mainly, the scripts keeps a window of 10 lines and slides it by
     3889adding a line and deleting the oldest (the substitution command on the
     3890second line works like a ‘D’ command but does not restart the loop).
     3891
     3892   The “sliding window” technique is a very powerful way to write
     3893efficient and complex ‘sed’ scripts, because commands like ‘P’ would
     3894require a lot of work if implemented manually.
     3895
     3896   To introduce the technique, which is fully demonstrated in the rest
     3897of this chapter and is based on the ‘N’, ‘P’ and ‘D’ commands, here is
     3898an implementation of ‘tail’ using a simple “sliding window.”
     3899
     3900   This looks complicated but in fact the working is the same as the
     3901last script: after we have kicked in the appropriate number of lines,
     3902however, we stop using the hold space to keep inter-line state, and
     3903instead use ‘N’ and ‘D’ to slide pattern space by one line:
     3904
     3905     #!/usr/bin/sed -f
     3906
     3907     1h
     3908     2,10 {; H; g; }
     3909     $q
     3910     1,9d
     3911     N
     3912     D
     3913
     3914   Note how the first, second and fourth line are inactive after the
     3915first ten lines of input.  After that, all the script does is: exiting
     3916on the last line of input, appending the next input line to pattern
     3917space, and removing the first line.
     3918
     3919
     3920File: sed.info,  Node: uniq,  Next: uniq -d,  Prev: tail,  Up: Examples
     3921
     39227.18 Make Duplicate Lines Unique
     3923================================
     3924
     3925This is an example of the art of using the ‘N’, ‘P’ and ‘D’ commands,
     3926probably the most difficult to master.
     3927
     3928     #!/usr/bin/sed -f
     3929     h
     3930
     3931     :b
     3932     # On the last line, print and exit
     3933     $b
     3934     N
     3935     /^\(.*\)\n\1$/ {
     3936         # The two lines are identical.  Undo the effect of
     3937         # the n command.
     3938         g
     3939         bb
     3940     }
     3941
     3942     # If the N command had added the last line, print and exit
     3943     $b
     3944
     3945     # The lines are different; print the first and go
     3946     # back working on the second.
     3947     P
     3948     D
     3949
     3950   As you can see, we maintain a 2-line window using ‘P’ and ‘D’.  This
     3951technique is often used in advanced ‘sed’ scripts.
     3952
     3953
     3954File: sed.info,  Node: uniq -d,  Next: uniq -u,  Prev: uniq,  Up: Examples
     3955
     39567.19 Print Duplicated Lines of Input
     3957====================================
     3958
     3959This script prints only duplicated lines, like ‘uniq -d’.
     3960
     3961     #!/usr/bin/sed -nf
     3962
     3963     $b
     3964     N
     3965     /^\(.*\)\n\1$/ {
     3966         # Print the first of the duplicated lines
     3967         s/.*\n//
     3968         p
     3969
     3970         # Loop until we get a different line
     3971         :b
     3972         $b
     3973         N
     3974         /^\(.*\)\n\1$/ {
     3975             s/.*\n//
     3976             bb
     3977         }
     3978     }
     3979
     3980     # The last line cannot be followed by duplicates
     3981     $b
     3982
     3983     # Found a different one.  Leave it alone in the pattern space
     3984     # and go back to the top, hunting its duplicates
     3985     D
     3986
     3987
     3988File: sed.info,  Node: uniq -u,  Next: cat -s,  Prev: uniq -d,  Up: Examples
     3989
     39907.20 Remove All Duplicated Lines
     3991================================
     3992
     3993This script prints only unique lines, like ‘uniq -u’.
     3994
     3995     #!/usr/bin/sed -f
     3996
     3997     # Search for a duplicate line --- until that, print what you find.
     3998     $b
     3999     N
     4000     /^\(.*\)\n\1$/ ! {
     4001         P
     4002         D
     4003     }
     4004
     4005     :c
     4006     # Got two equal lines in pattern space.  At the
     4007     # end of the file we simply exit
     4008     $d
     4009
     4010     # Else, we keep reading lines with N until we
     4011     # find a different one
     4012     s/.*\n//
     4013     N
     4014     /^\(.*\)\n\1$/ {
     4015         bc
     4016     }
     4017
     4018     # Remove the last instance of the duplicate line
     4019     # and go back to the top
     4020     D
     4021
     4022
     4023File: sed.info,  Node: cat -s,  Prev: uniq -u,  Up: Examples
     4024
     40257.21 Squeezing Blank Lines
     4026==========================
     4027
     4028As a final example, here are three scripts, of increasing complexity and
     4029speed, that implement the same function as ‘cat -s’, that is squeezing
     4030blank lines.
     4031
     4032   The first leaves a blank line at the beginning and end if there are
     4033some already.
     4034
     4035     #!/usr/bin/sed -f
     4036
     4037     # on empty lines, join with next
     4038     # Note there is a star in the regexp
     4039     :x
     4040     /^\n*$/ {
     4041     N
     4042     bx
     4043     }
     4044
     4045     # now, squeeze all '\n', this can be also done by:
     4046     # s/^\(\n\)*/\1/
     4047     s/\n*/\
     4048     /
     4049
     4050   This one is a bit more complex and removes all empty lines at the
     4051beginning.  It does leave a single blank line at end if one was there.
     4052
     4053     #!/usr/bin/sed -f
     4054
     4055     # delete all leading empty lines
     4056     1,/^./{
     4057     /./!d
     4058     }
     4059
     4060     # on an empty line we remove it and all the following
     4061     # empty lines, but one
     4062     :x
     4063     /./!{
     4064     N
     4065     s/^\n$//
     4066     tx
     4067     }
     4068
     4069   This removes leading and trailing blank lines.  It is also the
     4070fastest.  Note that loops are completely done with ‘n’ and ‘b’, without
     4071relying on ‘sed’ to restart the script automatically at the end of a
     4072line.
     4073
     4074     #!/usr/bin/sed -nf
     4075
     4076     # delete all (leading) blanks
     4077     /./!d
     4078
     4079     # get here: so there is a non empty
     4080     :x
     4081     # print it
     4082     p
     4083     # get next
     4084     n
     4085     # got chars? print it again, etc...
     4086     /./bx
     4087
     4088     # no, don't have chars: got an empty line
     4089     :z
     4090     # get next, if last line we finish here so no trailing
     4091     # empty lines are written
     4092     n
     4093     # also empty? then ignore it, and get next... this will
     4094     # remove ALL empty lines
     4095     /./!bz
     4096
     4097     # all empty lines were deleted/ignored, but we have a non empty.  As
     4098     # what we want to do is to squeeze, insert a blank line artificially
     4099     i\
     4100
     4101     bx
     4102
     4103
     4104File: sed.info,  Node: Limitations,  Next: Other Resources,  Prev: Examples,  Up: Top
     4105
     41068 GNU ‘sed’’s Limitations and Non-limitations
     4107*********************************************
     4108
     4109For those who want to write portable ‘sed’ scripts, be aware that some
     4110implementations have been known to limit line lengths (for the pattern
     4111and hold spaces) to be no more than 4000 bytes.  The POSIX standard
     4112specifies that conforming ‘sed’ implementations shall support at least
     41138192 byte line lengths.  GNU ‘sed’ has no built-in limit on line length;
     4114as long as it can ‘malloc()’ more (virtual) memory, you can feed or
     4115construct lines as long as you like.
     4116
     4117   However, recursion is used to handle subpatterns and indefinite
     4118repetition.  This means that the available stack space may limit the
     4119size of the buffer that can be processed by certain patterns.
     4120
     4121
     4122File: sed.info,  Node: Other Resources,  Next: Reporting Bugs,  Prev: Limitations,  Up: Top
     4123
     41249 Other Resources for Learning About ‘sed’
     4125******************************************
     4126
     4127For up to date information about GNU ‘sed’ please visit
     4128<https://www.gnu.org/software/sed/>.
     4129
     4130   Send general questions and suggestions to <sed-devel@gnu.org>.  Visit
     4131the mailing list archives for past discussions at
     4132<https://lists.gnu.org/archive/html/sed-devel/>.
     4133
     4134   The following resources provide information about ‘sed’ (both GNU
     4135‘sed’ and other variations).  Note these not maintained by GNU ‘sed’
     4136developers.
     4137
     4138   â€¢ sed ‘$HOME’: <http://sed.sf.net>
     4139
     4140   â€¢ sed FAQ: <http://sed.sf.net/sedfaq.html>
     4141
     4142   â€¢ seder’s grabbag: <http://sed.sf.net/grabbag>
     4143
     4144   â€¢ The ‘sed-users’ mailing list maintained by Sven Guckes:
     4145     <http://groups.yahoo.com/group/sed-users/> (note this is _not_ the
     4146     GNU ‘sed’ mailing list).
     4147
     4148
     4149File: sed.info,  Node: Reporting Bugs,  Next: GNU Free Documentation License,  Prev: Other Resources,  Up: Top
     4150
     415110 Reporting Bugs
     4152*****************
     4153
     4154Email bug reports to <bug-sed@gnu.org>.  Also, please include the output
     4155of ‘sed --version’ in the body of your report if at all possible.
     4156
     4157   Please do not send a bug report like this:
     4158
     4159     while building frobme-1.3.4
     4160     $ configure
     4161     error→ sed: file sedscr line 1: Unknown option to 's'
     4162
     4163   If GNU ‘sed’ doesn’t configure your favorite package, take a few
     4164extra minutes to identify the specific problem and make a stand-alone
     4165test case.  Unlike other programs such as C compilers, making such test
     4166cases for ‘sed’ is quite simple.
     4167
     4168   A stand-alone test case includes all the data necessary to perform
     4169the test, and the specific invocation of ‘sed’ that causes the problem.
     4170The smaller a stand-alone test case is, the better.  A test case should
     4171not involve something as far removed from ‘sed’ as “try to configure
     4172frobme-1.3.4”.  Yes, that is in principle enough information to look for
     4173the bug, but that is not a very practical prospect.
     4174
     4175   Here are a few commonly reported bugs that are not bugs.
     4176
     4177‘N’ command on the last line
     4178
     4179     Most versions of ‘sed’ exit without printing anything when the ‘N’
     4180     command is issued on the last line of a file.  GNU ‘sed’ prints
     4181     pattern space before exiting unless of course the ‘-n’ command
     4182     switch has been specified.  This choice is by design.
     4183
     4184     Default behavior (gnu extension, non-POSIX conforming):
     4185          $ seq 3 | sed N
     4186          1
     4187          2
     4188          3
     4189     To force POSIX-conforming behavior:
     4190          $ seq 3 | sed --posix N
     4191          1
     4192          2
     4193
     4194     For example, the behavior of
     4195          sed N foo bar
     4196     would depend on whether foo has an even or an odd number of
     4197     lines(1).  Or, when writing a script to read the next few lines
     4198     following a pattern match, traditional implementations of ‘sed’
     4199     would force you to write something like
     4200          /foo/{ $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N; $!N }
     4201     instead of just
     4202          /foo/{ N;N;N;N;N;N;N;N;N; }
     4203
     4204     In any case, the simplest workaround is to use ‘$d;N’ in scripts
     4205     that rely on the traditional behavior, or to set the
     4206     â€˜POSIXLY_CORRECT’ variable to a non-empty value.
     4207
     4208Regex syntax clashes (problems with backslashes)
     4209     â€˜sed’ uses the POSIX basic regular expression syntax.  According to
     4210     the standard, the meaning of some escape sequences is undefined in
     4211     this syntax; notable in the case of ‘sed’ are ‘\|’, ‘\+’, ‘\?’,
     4212     â€˜\`’, ‘\'’, ‘\<’, ‘\>’, ‘\b’, ‘\B’, ‘\w’, and ‘\W’.
     4213
     4214     As in all GNU programs that use POSIX basic regular expressions,
     4215     â€˜sed’ interprets these escape sequences as special characters.  So,
     4216     â€˜x\+’ matches one or more occurrences of ‘x’.  ‘abc\|def’ matches
     4217     either ‘abc’ or ‘def’.
     4218
     4219     This syntax may cause problems when running scripts written for
     4220     other ‘sed’s.  Some ‘sed’ programs have been written with the
     4221     assumption that ‘\|’ and ‘\+’ match the literal characters ‘|’ and
     4222     â€˜+’.  Such scripts must be modified by removing the spurious
     4223     backslashes if they are to be used with modern implementations of
     4224     â€˜sed’, like GNU ‘sed’.
     4225
     4226     On the other hand, some scripts use s|abc\|def||g to remove
     4227     occurrences of _either_ ‘abc’ or ‘def’.  While this worked until
     4228     â€˜sed’ 4.0.x, newer versions interpret this as removing the string
     4229     â€˜abc|def’.  This is again undefined behavior according to POSIX,
     4230     and this interpretation is arguably more robust: older ‘sed’s, for
     4231     example, required that the regex matcher parsed ‘\/’ as ‘/’ in the
     4232     common case of escaping a slash, which is again undefined behavior;
     4233     the new behavior avoids this, and this is good because the regex
     4234     matcher is only partially under our control.
     4235
     4236     In addition, this version of ‘sed’ supports several escape
     4237     characters (some of which are multi-character) to insert
     4238     non-printable characters in scripts (‘\a’, ‘\c’, ‘\d’, ‘\o’, ‘\r’,
     4239     â€˜\t’, ‘\v’, ‘\x’).  These can cause similar problems with scripts
     4240     written for other ‘sed’s.
     4241
     4242‘-i’ clobbers read-only files
     4243
     4244     In short, ‘sed -i’ will let you delete the contents of a read-only
     4245     file, and in general the ‘-i’ option (*note Invocation: Invoking
     4246     sed.) lets you clobber protected files.  This is not a bug, but
     4247     rather a consequence of how the Unix file system works.
     4248
     4249     The permissions on a file say what can happen to the data in that
     4250     file, while the permissions on a directory say what can happen to
     4251     the list of files in that directory.  ‘sed -i’ will not ever open
     4252     for writing a file that is already on disk.  Rather, it will work
     4253     on a temporary file that is finally renamed to the original name:
     4254     if you rename or delete files, you’re actually modifying the
     4255     contents of the directory, so the operation depends on the
     4256     permissions of the directory, not of the file.  For this same
     4257     reason, ‘sed’ does not let you use ‘-i’ on a writable file in a
     4258     read-only directory, and will break hard or symbolic links when
     4259     â€˜-i’ is used on such a file.
     4260
     4261‘0a’ does not work (gives an error)
     4262
     4263     There is no line 0.  0 is a special address that is only used to
     4264     treat addresses like ‘0,/RE/’ as active when the script starts: if
     4265     you write ‘1,/abc/d’ and the first line includes the string ‘abc’,
     4266     then that match would be ignored because address ranges must span
     4267     at least two lines (barring the end of the file); but what you
     4268     probably wanted is to delete every line up to the first one
     4269     including ‘abc’, and this is obtained with ‘0,/abc/d’.
     4270
     4271‘[a-z]’ is case insensitive
     4272
     4273     You are encountering problems with locales.  POSIX mandates that
     4274     â€˜[a-z]’ uses the current locale’s collation order – in C parlance,
     4275     that means using ‘strcoll(3)’ instead of ‘strcmp(3)’.  Some locales
     4276     have a case-insensitive collation order, others don’t.
     4277
     4278     Another problem is that ‘[a-z]’ tries to use collation symbols.
     4279     This only happens if you are on the GNU system, using GNU libc’s
     4280     regular expression matcher instead of compiling the one supplied
     4281     with GNU sed.  In a Danish locale, for example, the regular
     4282     expression ‘^[a-z]$’ matches the string ‘aa’, because this is a
     4283     single collating symbol that comes after ‘a’ and before ‘b’; ‘ll’
     4284     behaves similarly in Spanish locales, or ‘ij’ in Dutch locales.
     4285
     4286     To work around these problems, which may cause bugs in shell
     4287     scripts, set the ‘LC_COLLATE’ and ‘LC_CTYPE’ environment variables
     4288     to ‘C’.
     4289
     4290‘s/.*//’ does not clear pattern space
     4291
     4292     This happens if your input stream includes invalid multibyte
     4293     sequences.  POSIX mandates that such sequences are _not_ matched by
     4294     â€˜.’, so that ‘s/.*//’ will not clear pattern space as you would
     4295     expect.  In fact, there is no way to clear sed’s buffers in the
     4296     middle of the script in most multibyte locales (including UTF-8
     4297     locales).  For this reason, GNU ‘sed’ provides a ‘z’ command (for
     4298     â€˜zap’) as an extension.
     4299
     4300     To work around these problems, which may cause bugs in shell
     4301     scripts, set the ‘LC_COLLATE’ and ‘LC_CTYPE’ environment variables
     4302     to ‘C’.
     4303
     4304   ---------- Footnotes ----------
     4305
     4306   (1) which is the actual “bug” that prompted the change in behavior
     4307
     4308
     4309File: sed.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Reporting Bugs,  Up: Top
     4310
     4311Appendix A GNU Free Documentation License
     4312*****************************************
     4313
     4314                     Version 1.3, 3 November 2008
     4315
     4316     Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
     4317     <https://fsf.org/>
     4318
     4319     Everyone is permitted to copy and distribute verbatim copies
     4320     of this license document, but changing it is not allowed.
     4321
     4322  0. PREAMBLE
     4323
     4324     The purpose of this License is to make a manual, textbook, or other
     4325     functional and useful document “free” in the sense of freedom: to
     4326     assure everyone the effective freedom to copy and redistribute it,
     4327     with or without modifying it, either commercially or
     4328     noncommercially.  Secondarily, this License preserves for the
     4329     author and publisher a way to get credit for their work, while not
     4330     being considered responsible for modifications made by others.
     4331
     4332     This License is a kind of “copyleft”, which means that derivative
     4333     works of the document must themselves be free in the same sense.
     4334     It complements the GNU General Public License, which is a copyleft
     4335     license designed for free software.
     4336
     4337     We have designed this License in order to use it for manuals for
     4338     free software, because free software needs free documentation: a
     4339     free program should come with manuals providing the same freedoms
     4340     that the software does.  But this License is not limited to
     4341     software manuals; it can be used for any textual work, regardless
     4342     of subject matter or whether it is published as a printed book.  We
     4343     recommend this License principally for works whose purpose is
     4344     instruction or reference.
     4345
     4346  1. APPLICABILITY AND DEFINITIONS
     4347
     4348     This License applies to any manual or other work, in any medium,
     4349     that contains a notice placed by the copyright holder saying it can
     4350     be distributed under the terms of this License.  Such a notice
     4351     grants a world-wide, royalty-free license, unlimited in duration,
     4352     to use that work under the conditions stated herein.  The
     4353     â€œDocument”, below, refers to any such manual or work.  Any member
     4354     of the public is a licensee, and is addressed as “you”.  You accept
     4355     the license if you copy, modify or distribute the work in a way
     4356     requiring permission under copyright law.
     4357
     4358     A “Modified Version” of the Document means any work containing the
     4359     Document or a portion of it, either copied verbatim, or with
     4360     modifications and/or translated into another language.
     4361
     4362     A “Secondary Section” is a named appendix or a front-matter section
     4363     of the Document that deals exclusively with the relationship of the
     4364     publishers or authors of the Document to the Document’s overall
     4365     subject (or to related matters) and contains nothing that could
     4366     fall directly within that overall subject.  (Thus, if the Document
     4367     is in part a textbook of mathematics, a Secondary Section may not
     4368     explain any mathematics.)  The relationship could be a matter of
     4369     historical connection with the subject or with related matters, or
     4370     of legal, commercial, philosophical, ethical or political position
     4371     regarding them.
     4372
     4373     The “Invariant Sections” are certain Secondary Sections whose
     4374     titles are designated, as being those of Invariant Sections, in the
     4375     notice that says that the Document is released under this License.
     4376     If a section does not fit the above definition of Secondary then it
     4377     is not allowed to be designated as Invariant.  The Document may
     4378     contain zero Invariant Sections.  If the Document does not identify
     4379     any Invariant Sections then there are none.
     4380
     4381     The “Cover Texts” are certain short passages of text that are
     4382     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     4383     that says that the Document is released under this License.  A
     4384     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
     4385     be at most 25 words.
     4386
     4387     A “Transparent” copy of the Document means a machine-readable copy,
     4388     represented in a format whose specification is available to the
     4389     general public, that is suitable for revising the document
     4390     straightforwardly with generic text editors or (for images composed
     4391     of pixels) generic paint programs or (for drawings) some widely
     4392     available drawing editor, and that is suitable for input to text
     4393     formatters or for automatic translation to a variety of formats
     4394     suitable for input to text formatters.  A copy made in an otherwise
     4395     Transparent file format whose markup, or absence of markup, has
     4396     been arranged to thwart or discourage subsequent modification by
     4397     readers is not Transparent.  An image format is not Transparent if
     4398     used for any substantial amount of text.  A copy that is not
     4399     â€œTransparent” is called “Opaque”.
     4400
     4401     Examples of suitable formats for Transparent copies include plain
     4402     ASCII without markup, Texinfo input format, LaTeX input format,
     4403     SGML or XML using a publicly available DTD, and standard-conforming
     4404     simple HTML, PostScript or PDF designed for human modification.
     4405     Examples of transparent image formats include PNG, XCF and JPG.
     4406     Opaque formats include proprietary formats that can be read and
     4407     edited only by proprietary word processors, SGML or XML for which
     4408     the DTD and/or processing tools are not generally available, and
     4409     the machine-generated HTML, PostScript or PDF produced by some word
     4410     processors for output purposes only.
     4411
     4412     The “Title Page” means, for a printed book, the title page itself,
     4413     plus such following pages as are needed to hold, legibly, the
     4414     material this License requires to appear in the title page.  For
     4415     works in formats which do not have any title page as such, “Title
     4416     Page” means the text near the most prominent appearance of the
     4417     work’s title, preceding the beginning of the body of the text.
     4418
     4419     The “publisher” means any person or entity that distributes copies
     4420     of the Document to the public.
     4421
     4422     A section “Entitled XYZ” means a named subunit of the Document
     4423     whose title either is precisely XYZ or contains XYZ in parentheses
     4424     following text that translates XYZ in another language.  (Here XYZ
     4425     stands for a specific section name mentioned below, such as
     4426     â€œAcknowledgements”, “Dedications”, “Endorsements”, or “History”.)
     4427     To “Preserve the Title” of such a section when you modify the
     4428     Document means that it remains a section “Entitled XYZ” according
     4429     to this definition.
     4430
     4431     The Document may include Warranty Disclaimers next to the notice
     4432     which states that this License applies to the Document.  These
     4433     Warranty Disclaimers are considered to be included by reference in
     4434     this License, but only as regards disclaiming warranties: any other
     4435     implication that these Warranty Disclaimers may have is void and
     4436     has no effect on the meaning of this License.
     4437
     4438  2. VERBATIM COPYING
     4439
     4440     You may copy and distribute the Document in any medium, either
     4441     commercially or noncommercially, provided that this License, the
     4442     copyright notices, and the license notice saying this License
     4443     applies to the Document are reproduced in all copies, and that you
     4444     add no other conditions whatsoever to those of this License.  You
     4445     may not use technical measures to obstruct or control the reading
     4446     or further copying of the copies you make or distribute.  However,
     4447     you may accept compensation in exchange for copies.  If you
     4448     distribute a large enough number of copies you must also follow the
     4449     conditions in section 3.
     4450
     4451     You may also lend copies, under the same conditions stated above,
     4452     and you may publicly display copies.
     4453
     4454  3. COPYING IN QUANTITY
     4455
     4456     If you publish printed copies (or copies in media that commonly
     4457     have printed covers) of the Document, numbering more than 100, and
     4458     the Document’s license notice requires Cover Texts, you must
     4459     enclose the copies in covers that carry, clearly and legibly, all
     4460     these Cover Texts: Front-Cover Texts on the front cover, and
     4461     Back-Cover Texts on the back cover.  Both covers must also clearly
     4462     and legibly identify you as the publisher of these copies.  The
     4463     front cover must present the full title with all words of the title
     4464     equally prominent and visible.  You may add other material on the
     4465     covers in addition.  Copying with changes limited to the covers, as
     4466     long as they preserve the title of the Document and satisfy these
     4467     conditions, can be treated as verbatim copying in other respects.
     4468
     4469     If the required texts for either cover are too voluminous to fit
     4470     legibly, you should put the first ones listed (as many as fit
     4471     reasonably) on the actual cover, and continue the rest onto
     4472     adjacent pages.
     4473
     4474     If you publish or distribute Opaque copies of the Document
     4475     numbering more than 100, you must either include a machine-readable
     4476     Transparent copy along with each Opaque copy, or state in or with
     4477     each Opaque copy a computer-network location from which the general
     4478     network-using public has access to download using public-standard
     4479     network protocols a complete Transparent copy of the Document, free
     4480     of added material.  If you use the latter option, you must take
     4481     reasonably prudent steps, when you begin distribution of Opaque
     4482     copies in quantity, to ensure that this Transparent copy will
     4483     remain thus accessible at the stated location until at least one
     4484     year after the last time you distribute an Opaque copy (directly or
     4485     through your agents or retailers) of that edition to the public.
     4486
     4487     It is requested, but not required, that you contact the authors of
     4488     the Document well before redistributing any large number of copies,
     4489     to give them a chance to provide you with an updated version of the
     4490     Document.
     4491
     4492  4. MODIFICATIONS
     4493
     4494     You may copy and distribute a Modified Version of the Document
     4495     under the conditions of sections 2 and 3 above, provided that you
     4496     release the Modified Version under precisely this License, with the
     4497     Modified Version filling the role of the Document, thus licensing
     4498     distribution and modification of the Modified Version to whoever
     4499     possesses a copy of it.  In addition, you must do these things in
     4500     the Modified Version:
     4501
     4502       A. Use in the Title Page (and on the covers, if any) a title
     4503          distinct from that of the Document, and from those of previous
     4504          versions (which should, if there were any, be listed in the
     4505          History section of the Document).  You may use the same title
     4506          as a previous version if the original publisher of that
     4507          version gives permission.
     4508
     4509       B. List on the Title Page, as authors, one or more persons or
     4510          entities responsible for authorship of the modifications in
     4511          the Modified Version, together with at least five of the
     4512          principal authors of the Document (all of its principal
     4513          authors, if it has fewer than five), unless they release you
     4514          from this requirement.
     4515
     4516       C. State on the Title page the name of the publisher of the
     4517          Modified Version, as the publisher.
     4518
     4519       D. Preserve all the copyright notices of the Document.
     4520
     4521       E. Add an appropriate copyright notice for your modifications
     4522          adjacent to the other copyright notices.
     4523
     4524       F. Include, immediately after the copyright notices, a license
     4525          notice giving the public permission to use the Modified
     4526          Version under the terms of this License, in the form shown in
     4527          the Addendum below.
     4528
     4529       G. Preserve in that license notice the full lists of Invariant
     4530          Sections and required Cover Texts given in the Document’s
     4531          license notice.
     4532
     4533       H. Include an unaltered copy of this License.
     4534
     4535       I. Preserve the section Entitled “History”, Preserve its Title,
     4536          and add to it an item stating at least the title, year, new
     4537          authors, and publisher of the Modified Version as given on the
     4538          Title Page.  If there is no section Entitled “History” in the
     4539          Document, create one stating the title, year, authors, and
     4540          publisher of the Document as given on its Title Page, then add
     4541          an item describing the Modified Version as stated in the
     4542          previous sentence.
     4543
     4544       J. Preserve the network location, if any, given in the Document
     4545          for public access to a Transparent copy of the Document, and
     4546          likewise the network locations given in the Document for
     4547          previous versions it was based on.  These may be placed in the
     4548          “History” section.  You may omit a network location for a work
     4549          that was published at least four years before the Document
     4550          itself, or if the original publisher of the version it refers
     4551          to gives permission.
     4552
     4553       K. For any section Entitled “Acknowledgements” or “Dedications”,
     4554          Preserve the Title of the section, and preserve in the section
     4555          all the substance and tone of each of the contributor
     4556          acknowledgements and/or dedications given therein.
     4557
     4558       L. Preserve all the Invariant Sections of the Document, unaltered
     4559          in their text and in their titles.  Section numbers or the
     4560          equivalent are not considered part of the section titles.
     4561
     4562       M. Delete any section Entitled “Endorsements”.  Such a section
     4563          may not be included in the Modified Version.
     4564
     4565       N. Do not retitle any existing section to be Entitled
     4566          “Endorsements” or to conflict in title with any Invariant
     4567          Section.
     4568
     4569       O. Preserve any Warranty Disclaimers.
     4570
     4571     If the Modified Version includes new front-matter sections or
     4572     appendices that qualify as Secondary Sections and contain no
     4573     material copied from the Document, you may at your option designate
     4574     some or all of these sections as invariant.  To do this, add their
     4575     titles to the list of Invariant Sections in the Modified Version’s
     4576     license notice.  These titles must be distinct from any other
     4577     section titles.
     4578
     4579     You may add a section Entitled “Endorsements”, provided it contains
     4580     nothing but endorsements of your Modified Version by various
     4581     parties—for example, statements of peer review or that the text has
     4582     been approved by an organization as the authoritative definition of
     4583     a standard.
     4584
     4585     You may add a passage of up to five words as a Front-Cover Text,
     4586     and a passage of up to 25 words as a Back-Cover Text, to the end of
     4587     the list of Cover Texts in the Modified Version.  Only one passage
     4588     of Front-Cover Text and one of Back-Cover Text may be added by (or
     4589     through arrangements made by) any one entity.  If the Document
     4590     already includes a cover text for the same cover, previously added
     4591     by you or by arrangement made by the same entity you are acting on
     4592     behalf of, you may not add another; but you may replace the old
     4593     one, on explicit permission from the previous publisher that added
     4594     the old one.
     4595
     4596     The author(s) and publisher(s) of the Document do not by this
     4597     License give permission to use their names for publicity for or to
     4598     assert or imply endorsement of any Modified Version.
     4599
     4600  5. COMBINING DOCUMENTS
     4601
     4602     You may combine the Document with other documents released under
     4603     this License, under the terms defined in section 4 above for
     4604     modified versions, provided that you include in the combination all
     4605     of the Invariant Sections of all of the original documents,
     4606     unmodified, and list them all as Invariant Sections of your
     4607     combined work in its license notice, and that you preserve all
     4608     their Warranty Disclaimers.
     4609
     4610     The combined work need only contain one copy of this License, and
     4611     multiple identical Invariant Sections may be replaced with a single
     4612     copy.  If there are multiple Invariant Sections with the same name
     4613     but different contents, make the title of each such section unique
     4614     by adding at the end of it, in parentheses, the name of the
     4615     original author or publisher of that section if known, or else a
     4616     unique number.  Make the same adjustment to the section titles in
     4617     the list of Invariant Sections in the license notice of the
     4618     combined work.
     4619
     4620     In the combination, you must combine any sections Entitled
     4621     â€œHistory” in the various original documents, forming one section
     4622     Entitled “History”; likewise combine any sections Entitled
     4623     â€œAcknowledgements”, and any sections Entitled “Dedications”.  You
     4624     must delete all sections Entitled “Endorsements.”
     4625
     4626  6. COLLECTIONS OF DOCUMENTS
     4627
     4628     You may make a collection consisting of the Document and other
     4629     documents released under this License, and replace the individual
     4630     copies of this License in the various documents with a single copy
     4631     that is included in the collection, provided that you follow the
     4632     rules of this License for verbatim copying of each of the documents
     4633     in all other respects.
     4634
     4635     You may extract a single document from such a collection, and
     4636     distribute it individually under this License, provided you insert
     4637     a copy of this License into the extracted document, and follow this
     4638     License in all other respects regarding verbatim copying of that
     4639     document.
     4640
     4641  7. AGGREGATION WITH INDEPENDENT WORKS
     4642
     4643     A compilation of the Document or its derivatives with other
     4644     separate and independent documents or works, in or on a volume of a
     4645     storage or distribution medium, is called an “aggregate” if the
     4646     copyright resulting from the compilation is not used to limit the
     4647     legal rights of the compilation’s users beyond what the individual
     4648     works permit.  When the Document is included in an aggregate, this
     4649     License does not apply to the other works in the aggregate which
     4650     are not themselves derivative works of the Document.
     4651
     4652     If the Cover Text requirement of section 3 is applicable to these
     4653     copies of the Document, then if the Document is less than one half
     4654     of the entire aggregate, the Document’s Cover Texts may be placed
     4655     on covers that bracket the Document within the aggregate, or the
     4656     electronic equivalent of covers if the Document is in electronic
     4657     form.  Otherwise they must appear on printed covers that bracket
     4658     the whole aggregate.
     4659
     4660  8. TRANSLATION
     4661
     4662     Translation is considered a kind of modification, so you may
     4663     distribute translations of the Document under the terms of section
     4664     4.  Replacing Invariant Sections with translations requires special
     4665     permission from their copyright holders, but you may include
     4666     translations of some or all Invariant Sections in addition to the
     4667     original versions of these Invariant Sections.  You may include a
     4668     translation of this License, and all the license notices in the
     4669     Document, and any Warranty Disclaimers, provided that you also
     4670     include the original English version of this License and the
     4671     original versions of those notices and disclaimers.  In case of a
     4672     disagreement between the translation and the original version of
     4673     this License or a notice or disclaimer, the original version will
     4674     prevail.
     4675
     4676     If a section in the Document is Entitled “Acknowledgements”,
     4677     â€œDedications”, or “History”, the requirement (section 4) to
     4678     Preserve its Title (section 1) will typically require changing the
     4679     actual title.
     4680
     4681  9. TERMINATION
     4682
     4683     You may not copy, modify, sublicense, or distribute the Document
     4684     except as expressly provided under this License.  Any attempt
     4685     otherwise to copy, modify, sublicense, or distribute it is void,
     4686     and will automatically terminate your rights under this License.
     4687
     4688     However, if you cease all violation of this License, then your
     4689     license from a particular copyright holder is reinstated (a)
     4690     provisionally, unless and until the copyright holder explicitly and
     4691     finally terminates your license, and (b) permanently, if the
     4692     copyright holder fails to notify you of the violation by some
     4693     reasonable means prior to 60 days after the cessation.
     4694
     4695     Moreover, your license from a particular copyright holder is
     4696     reinstated permanently if the copyright holder notifies you of the
     4697     violation by some reasonable means, this is the first time you have
     4698     received notice of violation of this License (for any work) from
     4699     that copyright holder, and you cure the violation prior to 30 days
     4700     after your receipt of the notice.
     4701
     4702     Termination of your rights under this section does not terminate
     4703     the licenses of parties who have received copies or rights from you
     4704     under this License.  If your rights have been terminated and not
     4705     permanently reinstated, receipt of a copy of some or all of the
     4706     same material does not give you any rights to use it.
     4707
     4708  10. FUTURE REVISIONS OF THIS LICENSE
     4709
     4710     The Free Software Foundation may publish new, revised versions of
     4711     the GNU Free Documentation License from time to time.  Such new
     4712     versions will be similar in spirit to the present version, but may
     4713     differ in detail to address new problems or concerns.  See
     4714     <https://www.gnu.org/licenses/>.
     4715
     4716     Each version of the License is given a distinguishing version
     4717     number.  If the Document specifies that a particular numbered
     4718     version of this License “or any later version” applies to it, you
     4719     have the option of following the terms and conditions either of
     4720     that specified version or of any later version that has been
     4721     published (not as a draft) by the Free Software Foundation.  If the
     4722     Document does not specify a version number of this License, you may
     4723     choose any version ever published (not as a draft) by the Free
     4724     Software Foundation.  If the Document specifies that a proxy can
     4725     decide which future versions of this License can be used, that
     4726     proxy’s public statement of acceptance of a version permanently
     4727     authorizes you to choose that version for the Document.
     4728
     4729  11. RELICENSING
     4730
     4731     â€œMassive Multiauthor Collaboration Site” (or “MMC Site”) means any
     4732     World Wide Web server that publishes copyrightable works and also
     4733     provides prominent facilities for anybody to edit those works.  A
     4734     public wiki that anybody can edit is an example of such a server.
     4735     A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
     4736     site means any set of copyrightable works thus published on the MMC
     4737     site.
     4738
     4739     â€œCC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
     4740     license published by Creative Commons Corporation, a not-for-profit
     4741     corporation with a principal place of business in San Francisco,
     4742     California, as well as future copyleft versions of that license
     4743     published by that same organization.
     4744
     4745     â€œIncorporate” means to publish or republish a Document, in whole or
     4746     in part, as part of another Document.
     4747
     4748     An MMC is “eligible for relicensing” if it is licensed under this
     4749     License, and if all works that were first published under this
     4750     License somewhere other than this MMC, and subsequently
     4751     incorporated in whole or in part into the MMC, (1) had no cover
     4752     texts or invariant sections, and (2) were thus incorporated prior
     4753     to November 1, 2008.
     4754
     4755     The operator of an MMC Site may republish an MMC contained in the
     4756     site under CC-BY-SA on the same site at any time before August 1,
     4757     2009, provided the MMC is eligible for relicensing.
     4758
     4759ADDENDUM: How to use this License for your documents
     4760====================================================
     4761
     4762To use this License in a document you have written, include a copy of
     4763the License in the document and put the following copyright and license
     4764notices just after the title page:
     4765
     4766       Copyright (C)  YEAR  YOUR NAME.
     4767       Permission is granted to copy, distribute and/or modify this document
     4768       under the terms of the GNU Free Documentation License, Version 1.3
     4769       or any later version published by the Free Software Foundation;
     4770       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
     4771       Texts.  A copy of the license is included in the section entitled ``GNU
     4772       Free Documentation License''.
     4773
     4774   If you have Invariant Sections, Front-Cover Texts and Back-Cover
     4775Texts, replace the “with...Texts.” line with this:
     4776
     4777         with the Invariant Sections being LIST THEIR TITLES, with
     4778         the Front-Cover Texts being LIST, and with the Back-Cover Texts
     4779         being LIST.
     4780
     4781   If you have Invariant Sections without Cover Texts, or some other
     4782combination of the three, merge those two alternatives to suit the
     4783situation.
     4784
     4785   If your document contains nontrivial examples of program code, we
     4786recommend releasing these examples in parallel under your choice of free
     4787software license, such as the GNU General Public License, to permit
     4788their use in free software.
     4789
     4790
     4791File: sed.info,  Node: Concept Index,  Next: Command and Option Index,  Prev: GNU Free Documentation License,  Up: Top
     4792
     4793Concept Index
     4794*************
     4795
     4796This is a general index of all issues discussed in this manual, with the
     4797exception of the ‘sed’ commands and command-line options.
     4798
     4799[index]
     4800* Menu:
     4801
     4802* -e, example:                           Overview.            (line  46)
     4803* -e, example <1>:                       sed script overview. (line  37)
     4804* –expression, example:                  Overview.            (line  46)
     4805* -f, example:                           Overview.            (line  46)
     4806* -f, example <1>:                       sed script overview. (line  37)
     4807* –file, example:                        Overview.            (line  46)
     4808* -i, example:                           Overview.            (line  26)
     4809* -n, example:                           Overview.            (line  33)
     4810* -s, example:                           Overview.            (line  40)
     4811* 0 address:                             Reporting Bugs.      (line 114)
     4812* ;, command separator:                  sed script overview. (line  37)
     4813* a, and semicolons:                     sed script overview. (line  56)
     4814* Additional reading about sed:          Other Resources.     (line  13)
     4815* ADDR1,+N:                              Range Addresses.     (line  31)
     4816* ADDR1,~N:                              Range Addresses.     (line  31)
     4817* address range, example:                sed script overview. (line  23)
     4818* Address, as a regular expression:      Regexp Addresses.    (line  13)
     4819* Address, last line:                    Numeric Addresses.   (line  13)
     4820* Address, numeric:                      Numeric Addresses.   (line   8)
     4821* addresses, excluding:                  Addresses overview.  (line  33)
     4822* Addresses, in sed scripts:             Numeric Addresses.   (line   6)
     4823* addresses, negating:                   Addresses overview.  (line  33)
     4824* addresses, numeric:                    Addresses overview.  (line   6)
     4825* addresses, range:                      Addresses overview.  (line  26)
     4826* addresses, regular expression:         Addresses overview.  (line  20)
     4827* addresses, syntax:                     sed script overview. (line  13)
     4828* alphabetic characters:                 Character Classes and Bracket Expressions.
     4829                                                              (line  49)
     4830* alphanumeric characters:               Character Classes and Bracket Expressions.
     4831                                                              (line  44)
     4832* Append hold space to pattern space:    Other Commands.      (line 288)
     4833* Append next input line to pattern space: Other Commands.    (line 261)
     4834* Append pattern space to hold space:    Other Commands.      (line 280)
     4835* Appending text after a line:           Other Commands.      (line  45)
     4836* b, joining lines with:                 Branching and flow control.
     4837                                                              (line 150)
     4838* b, versus t:                           Branching and flow control.
     4839                                                              (line 150)
     4840* back-reference:                        Back-references and Subexpressions.
     4841                                                              (line   6)
     4842* Backreferences, in regular expressions: The "s" Command.    (line  18)
     4843* blank characters:                      Character Classes and Bracket Expressions.
     4844                                                              (line  54)
     4845* bracket expression:                    Character Classes and Bracket Expressions.
     4846                                                              (line   6)
     4847* Branch to a label, if s/// failed:     Extended Commands.   (line  63)
     4848* Branch to a label, if s/// succeeded:  Programming Commands.
     4849                                                              (line  22)
     4850* Branch to a label, unconditionally:    Programming Commands.
     4851                                                              (line  18)
     4852* branching and n, N:                    Branching and flow control.
     4853                                                              (line 105)
     4854* branching, infinite loop:              Branching and flow control.
     4855                                                              (line  95)
     4856* branching, joining lines:              Branching and flow control.
     4857                                                              (line 150)
     4858* Buffer spaces, pattern and hold:       Execution Cycle.     (line   6)
     4859* Bugs, reporting:                       Reporting Bugs.      (line   6)
     4860* c, and semicolons:                     sed script overview. (line  56)
     4861* case insensitive, regular expression:  Regexp Addresses.    (line  47)
     4862* Case-insensitive matching:             The "s" Command.     (line 117)
     4863* Caveat — #n on first line:             Common Commands.     (line  20)
     4864* character class:                       Character Classes and Bracket Expressions.
     4865                                                              (line   6)
     4866* character classes:                     Character Classes and Bracket Expressions.
     4867                                                              (line  43)
     4868* classes of characters:                 Character Classes and Bracket Expressions.
     4869                                                              (line  43)
     4870* Command groups:                        Common Commands.     (line  91)
     4871* Comments, in scripts:                  Common Commands.     (line  12)
     4872* Conditional branch:                    Programming Commands.
     4873                                                              (line  22)
     4874* Conditional branch <1>:                Extended Commands.   (line  63)
     4875* control characters:                    Character Classes and Bracket Expressions.
     4876                                                              (line  57)
     4877* Copy hold space into pattern space:    Other Commands.      (line 284)
     4878* Copy pattern space into hold space:    Other Commands.      (line 276)
     4879* cycle, restarting:                     Branching and flow control.
     4880                                                              (line  75)
     4881* d, example:                            sed script overview. (line  23)
     4882* Delete first line from pattern space:  Other Commands.      (line 255)
     4883* digit characters:                      Character Classes and Bracket Expressions.
     4884                                                              (line  62)
     4885* Disabling autoprint, from command line: Command-Line Options.
     4886                                                              (line  23)
     4887* empty regular expression:              Regexp Addresses.    (line  22)
     4888* Emptying pattern space:                Extended Commands.   (line  85)
     4889* Emptying pattern space <1>:            Reporting Bugs.      (line 143)
     4890* Evaluate Bourne-shell commands:        Extended Commands.   (line  12)
     4891* Evaluate Bourne-shell commands, after substitution: The "s" Command.
     4892                                                              (line 108)
     4893* example, address range:                sed script overview. (line  23)
     4894* example, regular expression:           sed script overview. (line  28)
     4895* Exchange hold space with pattern space: Other Commands.     (line 292)
     4896* Excluding lines:                       Addresses overview.  (line  33)
     4897* exit status:                           Exit status.         (line   6)
     4898* exit status, example:                  Exit status.         (line  25)
     4899* Extended regular expressions, choosing: Command-Line Options.
     4900                                                              (line 135)
     4901* Extended regular expressions, syntax:  ERE syntax.          (line   6)
     4902* File name, printing:                   Extended Commands.   (line  30)
     4903* Files to be processed as input:        Command-Line Options.
     4904                                                              (line 181)
     4905* Flow of control in scripts:            Programming Commands.
     4906                                                              (line  11)
     4907* Global substitution:                   The "s" Command.     (line  74)
     4908* GNU extensions, /dev/stderr file:      The "s" Command.     (line 101)
     4909* GNU extensions, /dev/stderr file <1>:  Other Commands.      (line 244)
     4910* GNU extensions, /dev/stdin file:       Other Commands.      (line 227)
     4911* GNU extensions, /dev/stdin file <1>:   Extended Commands.   (line  53)
     4912* GNU extensions, /dev/stdout file:      Command-Line Options.
     4913                                                              (line 189)
     4914* GNU extensions, /dev/stdout file <1>:  The "s" Command.     (line 101)
     4915* GNU extensions, /dev/stdout file <2>:  Other Commands.      (line 244)
     4916* GNU extensions, 0 address:             Range Addresses.     (line  31)
     4917* GNU extensions, 0 address <1>:         Reporting Bugs.      (line 114)
     4918* GNU extensions, 0,ADDR2 addressing:    Range Addresses.     (line  31)
     4919* GNU extensions, ADDR1,+N addressing:   Range Addresses.     (line  31)
     4920* GNU extensions, ADDR1,~N addressing:   Range Addresses.     (line  31)
     4921* GNU extensions, branch if s/// failed: Extended Commands.   (line  63)
     4922* GNU extensions, case modifiers in s commands: The "s" Command.
     4923                                                              (line  29)
     4924* GNU extensions, checking for their presence: Extended Commands.
     4925                                                              (line  69)
     4926* GNU extensions, debug:                 Command-Line Options.
     4927                                                              (line  29)
     4928* GNU extensions, disabling:             Command-Line Options.
     4929                                                              (line 102)
     4930* GNU extensions, emptying pattern space: Extended Commands.  (line  85)
     4931* GNU extensions, emptying pattern space <1>: Reporting Bugs. (line 143)
     4932* GNU extensions, evaluating Bourne-shell commands: The "s" Command.
     4933                                                              (line 108)
     4934* GNU extensions, evaluating Bourne-shell commands <1>: Extended Commands.
     4935                                                              (line  12)
     4936* GNU extensions, extended regular expressions: Command-Line Options.
     4937                                                              (line 135)
     4938* GNU extensions, g and NUMBER modifier: The "s" Command.     (line  80)
     4939* GNU extensions, I modifier:            The "s" Command.     (line 117)
     4940* GNU extensions, I modifier <1>:        Regexp Addresses.    (line  47)
     4941* GNU extensions, in-place editing:      Command-Line Options.
     4942                                                              (line  56)
     4943* GNU extensions, in-place editing <1>:  Reporting Bugs.      (line  95)
     4944* GNU extensions, M modifier:            The "s" Command.     (line 122)
     4945* GNU extensions, M modifier <1>:        Regexp Addresses.    (line  75)
     4946* GNU extensions, modifiers and the empty regular expression: Regexp Addresses.
     4947                                                              (line  22)
     4948* GNU extensions, N~M addresses:         Numeric Addresses.   (line  18)
     4949* GNU extensions, quitting silently:     Extended Commands.   (line  36)
     4950* GNU extensions, R command:             Extended Commands.   (line  53)
     4951* GNU extensions, reading a file a line at a time: Extended Commands.
     4952                                                              (line  53)
     4953* GNU extensions, returning an exit code: Common Commands.    (line  28)
     4954* GNU extensions, returning an exit code <1>: Extended Commands.
     4955                                                              (line  36)
     4956* GNU extensions, setting line length:   Other Commands.      (line 207)
     4957* GNU extensions, special escapes:       Escapes.             (line   6)
     4958* GNU extensions, special escapes <1>:   Reporting Bugs.      (line  88)
     4959* GNU extensions, special two-address forms: Range Addresses. (line  31)
     4960* GNU extensions, subprocesses:          The "s" Command.     (line 108)
     4961* GNU extensions, subprocesses <1>:      Extended Commands.   (line  12)
     4962* GNU extensions, to basic regular expressions: BRE syntax.   (line  13)
     4963* GNU extensions, to basic regular expressions <1>: BRE syntax.
     4964                                                              (line  59)
     4965* GNU extensions, to basic regular expressions <2>: BRE syntax.
     4966                                                              (line  62)
     4967* GNU extensions, to basic regular expressions <3>: BRE syntax.
     4968                                                              (line  77)
     4969* GNU extensions, to basic regular expressions <4>: BRE syntax.
     4970                                                              (line  87)
     4971* GNU extensions, to basic regular expressions <5>: Reporting Bugs.
     4972                                                              (line  61)
     4973* GNU extensions, two addresses supported by most commands: Other Commands.
     4974                                                              (line  61)
     4975* GNU extensions, two addresses supported by most commands <1>: Other Commands.
     4976                                                              (line 115)
     4977* GNU extensions, two addresses supported by most commands <2>: Other Commands.
     4978                                                              (line 204)
     4979* GNU extensions, two addresses supported by most commands <3>: Other Commands.
     4980                                                              (line 236)
     4981* GNU extensions, unlimited line length: Limitations.         (line   6)
     4982* GNU extensions, writing first line to a file: Extended Commands.
     4983                                                              (line  80)
     4984* Goto, in scripts:                      Programming Commands.
     4985                                                              (line  18)
     4986* graphic characters:                    Character Classes and Bracket Expressions.
     4987                                                              (line  65)
     4988* Greedy regular expression matching:    BRE syntax.          (line 113)
     4989* Grouping commands:                     Common Commands.     (line  91)
     4990* hexadecimal digits:                    Character Classes and Bracket Expressions.
     4991                                                              (line  88)
     4992* Hold space, appending from pattern space: Other Commands.   (line 280)
     4993* Hold space, appending to pattern space: Other Commands.     (line 288)
     4994* Hold space, copy into pattern space:   Other Commands.      (line 284)
     4995* Hold space, copying pattern space into: Other Commands.     (line 276)
     4996* Hold space, definition:                Execution Cycle.     (line   6)
     4997* Hold space, exchange with pattern space: Other Commands.    (line 292)
     4998* i, and semicolons:                     sed script overview. (line  56)
     4999* In-place editing:                      Reporting Bugs.      (line  95)
     5000* In-place editing, activating:          Command-Line Options.
     5001                                                              (line  56)
     5002* In-place editing, Perl-style backup file names: Command-Line Options.
     5003                                                              (line  67)
     5004* infinite loop, branching:              Branching and flow control.
     5005                                                              (line  95)
     5006* Inserting text before a line:          Other Commands.      (line 104)
     5007* joining lines with branching:          Branching and flow control.
     5008                                                              (line 150)
     5009* joining quoted-printable lines:        Branching and flow control.
     5010                                                              (line 150)
     5011* labels:                                Branching and flow control.
     5012                                                              (line  75)
     5013* Labels, in scripts:                    Programming Commands.
     5014                                                              (line  14)
     5015* Last line, selecting:                  Numeric Addresses.   (line  13)
     5016* Line length, setting:                  Command-Line Options.
     5017                                                              (line  97)
     5018* Line length, setting <1>:              Other Commands.      (line 207)
     5019* Line number, printing:                 Other Commands.      (line 194)
     5020* Line selection:                        Numeric Addresses.   (line   6)
     5021* Line, selecting by number:             Numeric Addresses.   (line   8)
     5022* Line, selecting by regular expression match: Regexp Addresses.
     5023                                                              (line  13)
     5024* Line, selecting last:                  Numeric Addresses.   (line  13)
     5025* List pattern space:                    Other Commands.      (line 207)
     5026* lower-case letters:                    Character Classes and Bracket Expressions.
     5027                                                              (line  68)
     5028* Mixing g and NUMBER modifiers in the s command: The "s" Command.
     5029                                                              (line  80)
     5030* multiple files:                        Overview.            (line  40)
     5031* multiple sed commands:                 sed script overview. (line  37)
     5032* n, and branching:                      Branching and flow control.
     5033                                                              (line 105)
     5034* N, and branching:                      Branching and flow control.
     5035                                                              (line 105)
     5036* named character classes:               Character Classes and Bracket Expressions.
     5037                                                              (line  43)
     5038* newline, command separator:            sed script overview. (line  37)
     5039* Next input line, append to pattern space: Other Commands.   (line 261)
     5040* Next input line, replace pattern space with: Common Commands.
     5041                                                              (line  61)
     5042* Non-bugs, 0 address:                   Reporting Bugs.      (line 114)
     5043* Non-bugs, in-place editing:            Reporting Bugs.      (line  95)
     5044* Non-bugs, localization-related:        Reporting Bugs.      (line 124)
     5045* Non-bugs, localization-related <1>:    Reporting Bugs.      (line 143)
     5046* Non-bugs, N command on the last line:  Reporting Bugs.      (line  30)
     5047* Non-bugs, regex syntax clashes:        Reporting Bugs.      (line  61)
     5048* numeric addresses:                     Addresses overview.  (line   6)
     5049* numeric characters:                    Character Classes and Bracket Expressions.
     5050                                                              (line  62)
     5051* omitting labels:                       Branching and flow control.
     5052                                                              (line  75)
     5053* output:                                Overview.            (line  26)
     5054* output, suppressing:                   Overview.            (line  33)
     5055* p, example:                            Overview.            (line  33)
     5056* paragraphs, processing:                Multiline techniques.
     5057                                                              (line  53)
     5058* parameters, script:                    Overview.            (line  46)
     5059* Parenthesized substrings:              The "s" Command.     (line  18)
     5060* Pattern space, definition:             Execution Cycle.     (line   6)
     5061* Portability, comments:                 Common Commands.     (line  15)
     5062* Portability, line length limitations:  Limitations.         (line   6)
     5063* Portability, N command on the last line: Reporting Bugs.    (line  30)
     5064* POSIXLY_CORRECT behavior, bracket expressions: Character Classes and Bracket Expressions.
     5065                                                              (line 112)
     5066* POSIXLY_CORRECT behavior, enabling:    Command-Line Options.
     5067                                                              (line 105)
     5068* POSIXLY_CORRECT behavior, escapes:     Escapes.             (line  11)
     5069* POSIXLY_CORRECT behavior, N command:   Reporting Bugs.      (line  56)
     5070* Print first line from pattern space:   Other Commands.      (line 273)
     5071* printable characters:                  Character Classes and Bracket Expressions.
     5072                                                              (line  72)
     5073* Printing file name:                    Extended Commands.   (line  30)
     5074* Printing line number:                  Other Commands.      (line 194)
     5075* Printing text unambiguously:           Other Commands.      (line 207)
     5076* processing paragraphs:                 Multiline techniques.
     5077                                                              (line  53)
     5078* punctuation characters:                Character Classes and Bracket Expressions.
     5079                                                              (line  75)
     5080* Q, example:                            Exit status.         (line  25)
     5081* q, example:                            sed script overview. (line  28)
     5082* Quitting:                              Common Commands.     (line  28)
     5083* Quitting <1>:                          Extended Commands.   (line  36)
     5084* quoted-printable lines, joining:       Branching and flow control.
     5085                                                              (line 150)
     5086* range addresses:                       Addresses overview.  (line  26)
     5087* range expression:                      Character Classes and Bracket Expressions.
     5088                                                              (line  18)
     5089* Range of lines:                        Range Addresses.     (line   6)
     5090* Range with start address of zero:      Range Addresses.     (line  31)
     5091* Read next input line:                  Common Commands.     (line  61)
     5092* Read text from a file:                 Other Commands.      (line 219)
     5093* Read text from a file <1>:             Extended Commands.   (line  53)
     5094* regex addresses and input lines:       Regexp Addresses.    (line  84)
     5095* regex addresses and pattern space:     Regexp Addresses.    (line  84)
     5096* regular expression addresses:          Addresses overview.  (line  20)
     5097* regular expression, example:           sed script overview. (line  28)
     5098* Replace hold space with copy of pattern space: Other Commands.
     5099                                                              (line 276)
     5100* Replace pattern space with copy of hold space: Other Commands.
     5101                                                              (line 284)
     5102* Replacing all text matching regexp in a line: The "s" Command.
     5103                                                              (line  74)
     5104* Replacing only Nth match of regexp in a line: The "s" Command.
     5105                                                              (line  78)
     5106* Replacing selected lines with other text: Other Commands.   (line 157)
     5107* Requiring GNU sed:                     Extended Commands.   (line  69)
     5108* restarting a cycle:                    Branching and flow control.
     5109                                                              (line  75)
     5110* Sandbox mode:                          Command-Line Options.
     5111                                                              (line 157)
     5112* script parameter:                      Overview.            (line  46)
     5113* Script structure:                      sed script overview. (line   6)
     5114* Script, from a file:                   Command-Line Options.
     5115                                                              (line  51)
     5116* Script, from command line:             Command-Line Options.
     5117                                                              (line  46)
     5118* sed commands syntax:                   sed script overview. (line  13)
     5119* sed commands, multiple:                sed script overview. (line  37)
     5120* sed script structure:                  sed script overview. (line   6)
     5121* Selecting lines to process:            Numeric Addresses.   (line   6)
     5122* Selecting non-matching lines:          Addresses overview.  (line  33)
     5123* semicolons, command separator:         sed script overview. (line  37)
     5124* Several lines, selecting:              Range Addresses.     (line   6)
     5125* Slash character, in regular expressions: Regexp Addresses.  (line  32)
     5126* space characters:                      Character Classes and Bracket Expressions.
     5127                                                              (line  80)
     5128* Spaces, pattern and hold:              Execution Cycle.     (line   6)
     5129* Special addressing forms:              Range Addresses.     (line  31)
     5130* standard input:                        Overview.            (line  18)
     5131* Standard input, processing as input:   Command-Line Options.
     5132                                                              (line 183)
     5133* standard output:                       Overview.            (line  26)
     5134* stdin:                                 Overview.            (line  18)
     5135* stdout:                                Overview.            (line  26)
     5136* Stream editor:                         Introduction.        (line   6)
     5137* subexpression:                         Back-references and Subexpressions.
     5138                                                              (line   6)
     5139* Subprocesses:                          The "s" Command.     (line 108)
     5140* Subprocesses <1>:                      Extended Commands.   (line  12)
     5141* Substitution of text, options:         The "s" Command.     (line  70)
     5142* suppressing output:                    Overview.            (line  33)
     5143* syntax, addresses:                     sed script overview. (line  13)
     5144* syntax, sed commands:                  sed script overview. (line  13)
     5145* t, joining lines with:                 Branching and flow control.
     5146                                                              (line 150)
     5147* t, versus b:                           Branching and flow control.
     5148                                                              (line 150)
     5149* Text, appending:                       Other Commands.      (line  45)
     5150* Text, deleting:                        Common Commands.     (line  44)
     5151* Text, insertion:                       Other Commands.      (line 104)
     5152* Text, printing:                        Common Commands.     (line  52)
     5153* Text, printing after substitution:     The "s" Command.     (line  88)
     5154* Text, writing to a file after substitution: The "s" Command.
     5155                                                              (line 101)
     5156* Transliteration:                       Other Commands.      (line  11)
     5157* Unbuffered I/O, choosing:              Command-Line Options.
     5158                                                              (line 164)
     5159* upper-case letters:                    Character Classes and Bracket Expressions.
     5160                                                              (line  84)
     5161* Usage summary, printing:               Command-Line Options.
     5162                                                              (line  17)
     5163* Version, printing:                     Command-Line Options.
     5164                                                              (line  13)
     5165* whitespace characters:                 Character Classes and Bracket Expressions.
     5166                                                              (line  80)
     5167* Working on separate files:             Command-Line Options.
     5168                                                              (line 148)
     5169* Write first line to a file:            Extended Commands.   (line  80)
     5170* Write to a file:                       Other Commands.      (line 244)
     5171* xdigit class:                          Character Classes and Bracket Expressions.
     5172                                                              (line  88)
     5173* Zero Address:                          Zero Address.        (line   6)
     5174* Zero, as range start address:          Range Addresses.     (line  31)
     5175
     5176
     5177File: sed.info,  Node: Command and Option Index,  Prev: Concept Index,  Up: Top
     5178
     5179Command and Option Index
     5180************************
     5181
     5182This is an alphabetical list of all ‘sed’ commands and command-line
     5183options.
     5184
     5185[index]
     5186* Menu:
     5187
     5188* # (comments):                          Common Commands.     (line  12)
     5189* --binary:                              Command-Line Options.
     5190                                                              (line 114)
     5191* --debug:                               Command-Line Options.
     5192                                                              (line  29)
     5193* --expression:                          Command-Line Options.
     5194                                                              (line  46)
     5195* --file:                                Command-Line Options.
     5196                                                              (line  51)
     5197* --follow-symlinks:                     Command-Line Options.
     5198                                                              (line 125)
     5199* --help:                                Command-Line Options.
     5200                                                              (line  17)
     5201* --in-place:                            Command-Line Options.
     5202                                                              (line  56)
     5203* --line-length:                         Command-Line Options.
     5204                                                              (line  97)
     5205* --null-data:                           Command-Line Options.
     5206                                                              (line 172)
     5207* --posix:                               Command-Line Options.
     5208                                                              (line 102)
     5209* --quiet:                               Command-Line Options.
     5210                                                              (line  23)
     5211* --regexp-extended:                     Command-Line Options.
     5212                                                              (line 135)
     5213* --sandbox:                             Command-Line Options.
     5214                                                              (line 157)
     5215* --separate:                            Command-Line Options.
     5216                                                              (line 148)
     5217* --silent:                              Command-Line Options.
     5218                                                              (line  23)
     5219* --unbuffered:                          Command-Line Options.
     5220                                                              (line 164)
     5221* --version:                             Command-Line Options.
     5222                                                              (line  13)
     5223* --zero-terminated:                     Command-Line Options.
     5224                                                              (line 172)
     5225* -b:                                    Command-Line Options.
     5226                                                              (line 114)
     5227* -e:                                    Command-Line Options.
     5228                                                              (line  46)
     5229* -E:                                    Command-Line Options.
     5230                                                              (line 135)
     5231* -f:                                    Command-Line Options.
     5232                                                              (line  51)
     5233* -i:                                    Command-Line Options.
     5234                                                              (line  56)
     5235* -l:                                    Command-Line Options.
     5236                                                              (line  97)
     5237* -n:                                    Command-Line Options.
     5238                                                              (line  23)
     5239* -n, forcing from within a script:      Common Commands.     (line  20)
     5240* -r:                                    Command-Line Options.
     5241                                                              (line 135)
     5242* -s:                                    Command-Line Options.
     5243                                                              (line 148)
     5244* -u:                                    Command-Line Options.
     5245                                                              (line 164)
     5246* -z:                                    Command-Line Options.
     5247                                                              (line 172)
     5248* : (label) command:                     Programming Commands.
     5249                                                              (line  14)
     5250* = (print line number) command:         Other Commands.      (line 194)
     5251* {} command grouping:                   Common Commands.     (line  91)
     5252* a (append text lines) command:         Other Commands.      (line  45)
     5253* alnum character class:                 Character Classes and Bracket Expressions.
     5254                                                              (line  44)
     5255* alpha character class:                 Character Classes and Bracket Expressions.
     5256                                                              (line  49)
     5257* b (branch) command:                    Programming Commands.
     5258                                                              (line  18)
     5259* blank character class:                 Character Classes and Bracket Expressions.
     5260                                                              (line  54)
     5261* c (change to text lines) command:      Other Commands.      (line 157)
     5262* cntrl character class:                 Character Classes and Bracket Expressions.
     5263                                                              (line  57)
     5264* D (delete first line) command:         Other Commands.      (line 255)
     5265* d (delete) command:                    Common Commands.     (line  44)
     5266* digit character class:                 Character Classes and Bracket Expressions.
     5267                                                              (line  62)
     5268* e (evaluate) command:                  Extended Commands.   (line  12)
     5269* F (File name) command:                 Extended Commands.   (line  30)
     5270* G (appending Get) command:             Other Commands.      (line 288)
     5271* g (get) command:                       Other Commands.      (line 284)
     5272* graph character class:                 Character Classes and Bracket Expressions.
     5273                                                              (line  65)
     5274* H (append Hold) command:               Other Commands.      (line 280)
     5275* h (hold) command:                      Other Commands.      (line 276)
     5276* i (insert text lines) command:         Other Commands.      (line 104)
     5277* l (list unambiguously) command:        Other Commands.      (line 207)
     5278* lower character class:                 Character Classes and Bracket Expressions.
     5279                                                              (line  68)
     5280* N (append Next line) command:          Other Commands.      (line 261)
     5281* n (next-line) command:                 Common Commands.     (line  61)
     5282* P (print first line) command:          Other Commands.      (line 273)
     5283* p (print) command:                     Common Commands.     (line  52)
     5284* print character class:                 Character Classes and Bracket Expressions.
     5285                                                              (line  72)
     5286* punct character class:                 Character Classes and Bracket Expressions.
     5287                                                              (line  75)
     5288* q (quit) command:                      Common Commands.     (line  28)
     5289* Q (silent Quit) command:               Extended Commands.   (line  36)
     5290* r (read file) command:                 Other Commands.      (line 219)
     5291* R (read line) command:                 Extended Commands.   (line  53)
     5292* s command, option flags:               The "s" Command.     (line  70)
     5293* space character class:                 Character Classes and Bracket Expressions.
     5294                                                              (line  80)
     5295* T (test and branch if failed) command: Extended Commands.   (line  63)
     5296* t (test and branch if successful) command: Programming Commands.
     5297                                                              (line  22)
     5298* upper character class:                 Character Classes and Bracket Expressions.
     5299                                                              (line  84)
     5300* v (version) command:                   Extended Commands.   (line  69)
     5301* w (write file) command:                Other Commands.      (line 244)
     5302* W (write first line) command:          Extended Commands.   (line  80)
     5303* x (eXchange) command:                  Other Commands.      (line 292)
     5304* xdigit character class:                Character Classes and Bracket Expressions.
     5305                                                              (line  88)
     5306* y (transliterate) command:             Other Commands.      (line  11)
     5307* z (Zap) command:                       Extended Commands.   (line  85)
     5308
     5309
    305310
    315311Tag Table:
    32 (Indirect)
    33 Node: Top935
    34 Node: Introduction3816
    35 Node: Invoking sed4370
    36 Ref: Invoking sed-Footnote-19396
    37 Ref: Invoking sed-Footnote-29588
    38 Node: sed Programs9691
    39 Node: Execution Cycle10838
    40 Ref: Execution Cycle-Footnote-112011
    41 Node: Addresses12322
    42 Node: Regular Expressions17061
    43 Node: Common Commands24610
    44 Node: The "s" Command26608
    45 Ref: The "s" Command-Footnote-130940
    46 Node: Other Commands31012
    47 Ref: Other Commands-Footnote-136149
    48 Node: Programming Commands36221
    49 Node: Extended Commands37130
    50 Node: Escapes40705
    51 Ref: Escapes-Footnote-143711
    52 Node: Examples43902
    53 Node: Centering lines44997
    54 Node: Increment a number45909
    55 Ref: Increment a number-Footnote-147489
    56 Node: Rename files to lower case47609
    57 Node: Print bash environment50405
    58 Node: Reverse chars of lines51185
    59 Ref: Reverse chars of lines-Footnote-152202
    60 Node: tac52424
    61 Node: cat -n53206
    62 Node: cat -b55063
    63 Node: wc -c55815
    64 Ref: wc -c-Footnote-157748
    65 Node: wc -w57817
    66 Node: wc -l59289
    67 Node: head59526
    68 Node: tail59850
    69 Node: uniq61534
    70 Node: uniq -d62330
    71 Node: uniq -u63054
    72 Node: cat -s63778
    73 Node: Limitations65667
    74 Node: Other Resources66507
    75 Node: Reporting Bugs67433
    76 Ref: Reporting Bugs-Footnote-173962
    77 Node: Extended regexps74033
    78 Node: Concept Index75200
    79 Node: Command and Option Index85215
     5312Node: Top738
     5313Node: Introduction2217
     5314Node: Invoking sed2789
     5315Node: Overview3114
     5316Node: Command-Line Options5561
     5317Ref: Command-Line Options-Footnote-113530
     5318Ref: Command-Line Options-Footnote-213758
     5319Node: Exit status13861
     5320Node: sed scripts14795
     5321Node: sed script overview15394
     5322Node: sed commands list18057
     5323Node: The "s" Command23070
     5324Ref: The "s" Command-Footnote-128889
     5325Node: Common Commands28969
     5326Node: Other Commands32106
     5327Ref: insert command35324
     5328Ref: Other Commands-Footnote-141629
     5329Node: Programming Commands41709
     5330Node: Extended Commands42649
     5331Node: Multiple commands syntax46675
     5332Node: sed addresses51217
     5333Node: Addresses overview51706
     5334Node: Numeric Addresses53705
     5335Node: Regexp Addresses55116
     5336Ref: Regexp Addresses-Footnote-159252
     5337Node: Range Addresses59392
     5338Ref: Zero Address Regex Range60294
     5339Node: Zero Address61753
     5340Node: sed regular expressions62318
     5341Node: Regular Expressions Overview63172
     5342Node: BRE vs ERE64733
     5343Node: BRE syntax66484
     5344Node: ERE syntax73304
     5345Node: Character Classes and Bracket Expressions74878
     5346Node: regexp extensions80030
     5347Node: Back-references and Subexpressions82506
     5348Node: Escapes84958
     5349Ref: Escapes-Footnote-188105
     5350Node: Locale Considerations88304
     5351Ref: Locale Considerations-Footnote-193067
     5352Node: advanced sed93239
     5353Node: Execution Cycle93606
     5354Ref: Execution Cycle-Footnote-194845
     5355Node: Hold and Pattern Buffers95162
     5356Node: Multiline techniques95350
     5357Node: Branching and flow control98704
     5358Node: Examples107029
     5359Node: Joining lines108275
     5360Node: Centering lines110082
     5361Node: Increment a number111006
     5362Ref: Increment a number-Footnote-1112495
     5363Node: Rename files to lower case112623
     5364Node: Print bash environment115418
     5365Node: Reverse chars of lines116181
     5366Ref: Reverse chars of lines-Footnote-1117224
     5367Node: Text search across multiple lines117441
     5368Node: Line length adjustment120786
     5369Node: Adding a header to multiple files122533
     5370Node: tac125986
     5371Node: cat -n126774
     5372Node: cat -b128616
     5373Node: wc -c129378
     5374Ref: wc -c-Footnote-1131316
     5375Node: wc -w131385
     5376Node: wc -l132875
     5377Node: head133128
     5378Node: tail133467
     5379Node: uniq135196
     5380Node: uniq -d136007
     5381Node: uniq -u136722
     5382Node: cat -s137435
     5383Node: Limitations139298
     5384Node: Other Resources140161
     5385Node: Reporting Bugs141104
     5386Ref: N_command_last_line142294
     5387Ref: Reporting Bugs-Footnote-1148805
     5388Node: GNU Free Documentation License148880
     5389Node: Concept Index174239
     5390Node: Command and Option Index201600
    805391
    815392End Tag Table
     5393
     5394
     5395Local Variables:
     5396coding: utf-8
     5397End:
Note: See TracChangeset for help on using the changeset viewer.