Changeset 3613 for trunk/src/sed/doc/sed.info
- Timestamp:
- Sep 19, 2024, 2:34:43 AM (10 months ago)
- Location:
- trunk/src/sed
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/sed
-
Property svn:mergeinfo
set to
/vendor/sed/current merged eligible
-
Property svn:mergeinfo
set to
-
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 1 This is sed.info, produced by makeinfo version 6.8dev from sed.texi. 2 3 This 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â. 4 13 INFO-DIR-SECTION Text creation and manipulation 5 14 START-INFO-DIR-ENTRY … … 8 17 END-INFO-DIR-ENTRY 9 18 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 20 File: sed.info, Node: Top, Next: Introduction, Up: (dir) 21 22 GNU âsedâ 23 ********* 24 25 This 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 54 File: sed.info, Node: Introduction, Next: Invoking sed, Prev: Top, Up: Top 55 56 1 Introduction 57 ************** 58 59 âsedâ is a stream editor. A stream editor is used to perform basic text 60 transformations on an input stream (a file or input from a pipeline). 61 While 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), 63 and is consequently more efficient. But it is âsedââs ability to filter 64 text in a pipeline which particularly distinguishes it from other types 65 of editors. 66 67 68 File: sed.info, Node: Invoking sed, Next: sed scripts, Prev: Introduction, Up: Top 69 70 2 Running sed 71 ************* 72 73 This chapter covers how to run âsedâ. Details of âsedâ scripts and 74 individual âsedâ commands are discussed in the next chapter. 75 76 * Menu: 77 78 * Overview:: 79 * Command-Line Options:: 80 * Exit status:: 81 82 83 File: sed.info, Node: Overview, Next: Command-Line Options, Up: Invoking sed 84 85 2.1 Overview 86 ============ 87 88 Normally â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 98 instance per line. 99 100 If you do not specify INPUTFILE, or if INPUTFILE is â-â, âsedâ 101 filters the contents of the standard input. The following commands are 102 equivalent: 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 109 in-place instead of printing to standard output. See also the âWâ and 110 âs///wâ commands for writing output to other files. The following 111 command 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 116 been modified/deleted by commands such as âdâ). Use â-nâ to suppress 117 output, and the âpâ command to print specific lines. The following 118 command 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 123 example prints the first line of the first file (âone.txtâ) and the last 124 line 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 129 parameter as the SCRIPT, and the following non-option parameters as 130 input files. If â-eâ or â-fâ options are used to specify a SCRIPT, all 131 non-option parameters are taken as input files. Options â-eâ and â-fâ 132 can be combined, and can appear multiple times (in which case the final 133 effective 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 147 File: sed.info, Node: Command-Line Options, Next: Exit status, Prev: Overview, Up: Invoking sed 148 149 2.2 Command-Line Options 150 ======================== 151 152 The 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 324 the command-line, then the first non-option argument on the command line 325 is taken to be the SCRIPT to be executed. 326 327 If any command-line parameters remain after processing the above, 328 these parameters are interpreted as the names of input files to be 329 processed. A file name of â-â refers to the standard input stream. The 330 standard 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â. 335 You can still write to the standard output by using the âwâ or âWâ 336 commands together with the â/dev/stdoutâ special file 337 338 (2) Note that GNU âsedâ creates the backup file whether or not any 339 output is actually changed. 340 341 342 File: sed.info, Node: Exit status, Prev: Command-Line Options, Up: Invoking sed 343 344 2.3 Exit status 345 =============== 346 347 An exit status of zero indicates success, and a nonzero value indicates 348 failure. GNU âsedâ returns the following exit status error values: 349 350 0 351 Successful completion. 352 353 1 354 Invalid command, invalid syntax, invalid regular expression or a 355 GNU âsedâ extension command used with â--posixâ. 356 357 2 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 362 4 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â 367 with a custom exit code value (this is a GNU âsedâ extension): 368 369 $ echo | sed 'Q42' ; echo $? 370 42 371 372 373 File: sed.info, Node: sed scripts, Next: sed addresses, Prev: Invoking sed, Up: Top 374 375 3 â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 390 File: sed.info, Node: sed script overview, Next: sed commands list, Up: sed scripts 391 392 3.1 âsedâ script overview 393 ========================= 394 395 A âsedâ program consists of one or more âsedâ commands, passed in by one 396 or more of the â-eâ, â-fâ, â--expressionâ, and â--fileâ options, or the 397 first non-option argument if zero of these options are used. This 398 document will refer to âtheâ âsedâ script; this is understood to mean 399 the in-order concatenation of all of the SCRIPTs and SCRIPT-FILEs passed 400 in. *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 407 address. If â[addr]â is specified, the command X will be executed only 408 on the matched lines. â[addr]â can be a single line number, a regular 409 expression, 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â 413 is 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 418 string âfooâ is found. If such line is found, âsedâ will terminate with 419 exit status 42. If such line was not found (and no other error 420 occurred), âsedâ will exit with status 0. â/^foo/â is a 421 regular-expression address. âqâ is the quit command. â42â is the 422 command option. 423 424 sed '/^foo/q42' input.txt > output.txt 425 426 Commands within a SCRIPT or SCRIPT-FILE can be separated by 427 semicolons (â;â) or newlines (ASCII 10). Multiple scripts can be 428 specified with â-eâ or â-fâ options. 429 430 The following examples are all equivalent. They perform two âsedâ 431 operations: deleting any lines matching the regular expression â/^foo/â, 432 and 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 446 semicolons working as command separators and thus should be terminated 447 with newlines or be placed at the end of a SCRIPT or SCRIPT-FILE. 448 Commands can also be preceded with optional non-significant whitespace 449 characters. *Note Multiple commands syntax::. 450 451 452 File: sed.info, Node: sed commands list, Next: The "s" Command, Prev: sed script overview, Up: sed scripts 453 454 3.2 âsedâ commands summary 455 ========================== 456 457 The following commands are supported in GNU âsedâ. Some are standard 458 POSIX commands, while other are GNU extensions. Details and examples 459 for each command are in the following sections. (Mnemonics) are shown 460 in 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 616 File: sed.info, Node: The "s" Command, Next: Common Commands, Prev: sed commands list, Up: sed scripts 617 618 3.3 The âsâ Command 619 =================== 620 621 The â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 623 is âs/REGEXP/REPLACEMENT/FLAGSâ. 624 625 Its basic concept is simple: the âsâ command attempts to match the 626 pattern space against the supplied regular expression REGEXP; if the 627 match is successful, then that portion of the pattern space which was 628 matched is replaced with REPLACEMENT. 629 630 For details about REGEXP syntax *note Regular Expression Addresses: 631 Regexp Addresses. 632 633 The REPLACEMENT can contain â\Nâ (N being a number from 1 to 9, 634 inclusive) references, which refer to the portion of the match which is 635 contained between the Nth â\(â and its matching â\)â. Also, the 636 REPLACEMENT can contain unescaped â&â characters which reference the 637 whole matched portion of the pattern space. 638 639 The â/â characters may be uniformly replaced by any other single 640 character within any given âsâ command. The â/â character (or whatever 641 other character is used in its stead) can appear in the REGEXP or 642 REPLACEMENT only if it is preceded by a â\â character. 643 644 Finally, as a GNU âsedâ extension, you can include a special sequence 645 made of a backslash and one of the letters âLâ, âlâ, âUâ, âuâ, or âEâ. 646 The 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 664 from one occurrence of the regular expression to another. For example, 665 when the following command is executed with âa-b-â in pattern space: 666 s/\(b\?\)-/x\u\1/g 667 668 the output is âaxxBâ. When replacing the first â-â, the â\uâ sequence 669 only affects the empty replacement of â\1â. It does not affect the âxâ 670 character 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 673 replacement 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 677 will replace â-â with âXâ (uppercase) and âb-â with âBxâ. If this 678 behavior is undesirable, you can prevent it by adding a â\Eâ 679 sequenceâafter â\1â in this case. 680 681 To include a literal â\â, â&â, or newline in the final replacement, 682 be sure to precede the desired â\â, â&â, or newline in the REPLACEMENT 683 with a â\â. 684 685 The âsâ command can be followed by zero or more of the following 686 FLAGS: 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 751 File: sed.info, Node: Common Commands, Next: Other Commands, Prev: The "s" Command, Up: sed scripts 752 753 3.4 Often-Used Commands 754 ======================= 755 756 If you use âsedâ at all, you will quite likely want to know these 757 commands. 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 850 File: sed.info, Node: Other Commands, Next: Programming Commands, Prev: Common Commands, Up: sed scripts 851 852 3.5 Less Frequently-Used Commands 853 ================================= 854 855 Though perhaps less frequently used than those in the previous section, 856 some very small yet useful âsedâ scripts can be built with these 857 commands. 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 1148 File: sed.info, Node: Programming Commands, Next: Extended Commands, Prev: Other Commands, Up: sed scripts 1149 1150 3.6 Commands for âsedâ gurus 1151 ============================ 1152 1153 In most cases, use of these commands indicates that you are probably 1154 better off programming in something like âawkâ or Perl. But 1155 occasionally one is committed to sticking with âsedâ, and these commands 1156 can 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 1174 File: sed.info, Node: Extended Commands, Next: Multiple commands syntax, Prev: Programming Commands, Up: sed scripts 1175 1176 3.7 Commands Specific to GNU âsedâ 1177 ================================== 1178 1179 These commands are specific to GNU âsedâ, so you must use them with care 1180 and only when you are sure that hindering portability is not evil. They 1181 allow you to check for GNU âsedâ extensions or to do tasks that are 1182 required 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 1266 File: sed.info, Node: Multiple commands syntax, Prev: Extended Commands, Up: sed scripts 1267 1268 3.8 Multiple commands syntax 1269 ============================ 1270 1271 There are several methods to specify multiple commands in a âsedâ 1272 program. 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. 1278 Alternatively, you may specify each command as an argument to an â-eâ 1279 option: 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 1301 semicolon (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. 1313 Leading and trailing whitespace is ignored. In the examples below the 1314 label is âxâ. The first example works with GNU âsedâ. The second is a 1315 portable 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 1326 3.8.1 Commands Requiring a newline 1327 ---------------------------------- 1328 1329 The following commands cannot be separated by a semicolon and require a 1330 newline: 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 1437 File: sed.info, Node: sed addresses, Next: sed regular expressions, Prev: sed scripts, Up: Top 1438 1439 4 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 1451 File: sed.info, Node: Addresses overview, Next: Numeric Addresses, Up: sed addresses 1452 1453 4.1 Addresses overview 1454 ====================== 1455 1456 Addresses determine on which line(s) the âsedâ command will be executed. 1457 The 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. 1463 The following command replaces âhelloâ with âworldâ, targeting every 1464 line of the input file. However, note that it modifies only the first 1465 instance of âhelloâ on each line. Use the âgâ modifier to affect every 1466 instance 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 1471 content instead of line numbers. The following command replaces âhelloâ 1472 with â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. 1478 The following command replaces âhelloâ with âworldâ only on lines 4 to 1479 17 (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 1485 the â!â character follows an address or an address range, then only 1486 lines which do _not_ match the addresses will be selected. The 1487 following command replaces âhelloâ with âworldâ only on lines _not_ 1488 containing 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 1493 to 3 and from line 18 to the last line of the input file (i.e. 1494 excluding lines 4 to 17): 1495 1496 sed '4,17!s/hello/world/' input.txt > output.txt 1497 1498 1499 File: sed.info, Node: Numeric Addresses, Next: Regexp Addresses, Prev: Addresses overview, Up: sed addresses 1500 1501 4.2 Selecting lines by numbers 1502 ============================== 1503 1504 Addresses 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 1538 File: sed.info, Node: Regexp Addresses, Next: Range Addresses, Prev: Numeric Addresses, Up: sed addresses 1539 1540 4.3 selecting lines by text matching 1541 ==================================== 1542 1543 GNU âsedâ supports the following regular expression addresses. The 1544 default regular expression is *note Basic Regular Expression (BRE): BRE 1545 syntax. If â-Eâ or â-râ options are used, The regular expression should 1546 be 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. 1622 If the pattern space is changed (for example with âs///â command) the 1623 regular expression matching will operate on the changed text. 1624 1625 In the following example, automatic printing is disabled with â-nâ. 1626 The â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 1628 second line is changed before the â/[0-9]/â regex, it will not match and 1629 will 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 1642 File: sed.info, Node: Range Addresses, Next: Zero Address, Prev: Regexp Addresses, Up: sed addresses 1643 1644 4.4 Range Addresses 1645 =================== 1646 1647 An address range can be specified by specifying two addresses separated 1648 by a comma (â,â). An address range matches lines starting from where 1649 the first address matches, and continues until the second address 1650 matches (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 1658 will start with the line _following_ the line which matched the first 1659 address: a range will always span at least two lines (except of course 1660 if 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 1667 matching 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 1673 GNU 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 1718 File: sed.info, Node: Zero Address, Prev: Range Addresses, Up: sed addresses 1719 1720 4.5 Zero Address 1721 ================ 1722 1723 As 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 1730 sense; Commands which are given the â0â address in any other way will 1731 give an error. 1732 1733 1734 File: sed.info, Node: sed regular expressions, Next: advanced sed, Prev: sed addresses, Up: Top 1735 1736 5 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 1753 File: sed.info, Node: Regular Expressions Overview, Next: BRE vs ERE, Up: sed regular expressions 1754 1755 5.1 Overview of regular expression in âsedâ 1756 =========================================== 1757 1758 To know how to use âsedâ, people should understand regular expressions 1759 (âregexpâ for short). A regular expression is a pattern that is matched 1760 against a subject string from left to right. Most characters are 1761 âordinaryâ: they stand for themselves in a pattern, and match the 1762 corresponding characters. Regular expressions in âsedâ are specified 1763 between 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 1774 alternatives and repetitions in the pattern. These are encoded in the 1775 pattern by the use of âspecial charactersâ, which do not stand for 1776 themselves but instead are interpreted in some special way. 1777 1778 The character â^â (caret) in a regular expression matches the 1779 beginning of the line. The character â.â (dot) matches any single 1780 character. The following âsedâ command matches and prints lines which 1781 start with the letter âbâ, followed by any single character, followed by 1782 the 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 1791 characters in regular expressions. 1792 1793 1794 File: sed.info, Node: BRE vs ERE, Next: BRE syntax, Prev: Regular Expressions Overview, Up: sed regular expressions 1795 1796 5.2 Basic (BRE) and extended (ERE) regular expression 1797 ===================================================== 1798 1799 Basic and extended regular expressions are two variations on the syntax 1800 of the specified pattern. Basic Regular Expression (BRE) syntax is the 1801 default in âsedâ (and similarly in âgrepâ). Use the POSIX-specified 1802 â-Eâ option (â-râ, â--regexp-extendedâ) to enable Extended Regular 1803 Expression (ERE) syntax. 1804 1805 In GNU âsedâ, the only difference between basic and extended regular 1806 expressions is in the behavior of a few special characters: â?â, â+â, 1807 parentheses, braces (â{}â), and â|â. 1808 1809 With basic (BRE) syntax, these characters do not have special meaning 1810 unless prefixed with a backslash (â\â); While with extended (ERE) syntax 1811 it is reversed: these characters are special unless they are prefixed 1812 with backslash (â\â). 1813 1814 Desired pattern Basic (BRE) Syntax Extended (ERE) Syntax 1815 1816 -------------------------------------------------------------------------- 1817 literal â+â (plus $ echo 'a+b=c' > foo $ echo 'a+b=c' > foo 1818 sign) $ sed -n '/a+b/p' foo $ sed -E -n '/a\+b/p' foo 1819 a+b=c a+b=c 1820 1821 One or more âaâ $ echo aab > foo $ echo aab > foo 1822 characters $ sed -n '/a\+b/p' foo $ sed -E -n '/a+b/p' foo 1823 followed by âbâ aab aab 1824 (plus sign as 1825 special 1826 meta-character) 1827 1828 1829 File: sed.info, Node: BRE syntax, Next: ERE syntax, Prev: BRE vs ERE, Up: sed regular expressions 1830 1831 5.3 Overview of basic regular expression syntax 1832 =============================================== 1833 1834 Here 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 1942 attempted from left to right and, if two or more matches are possible 1943 starting at the same character, it selects the longest. 1944 1945 Examples: 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 2004 File: sed.info, Node: ERE syntax, Next: Character Classes and Bracket Expressions, Prev: BRE syntax, Up: sed regular expressions 2005 2006 5.4 Overview of extended regular expression syntax 2007 ================================================== 2008 2009 The only difference between basic and extended regular expressions is in 2010 the behavior of a few characters: â?â, â+â, parentheses, braces (â{}â), 2011 and â|â. While basic regular expressions require these to be escaped if 2012 you want them to behave as special characters, when using extended 2013 regular expressions you must escape them if you want them _to match a 2014 literal character_. â|â is special here because â\|â is a GNU extension 2015 â standard basic regular expressions do not provide its functionality. 2016 2017 Examples: 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 2044 File: sed.info, Node: Character Classes and Bracket Expressions, Next: regexp extensions, Prev: ERE syntax, Up: sed regular expressions 2045 2046 5.5 Character Classes and Bracket Expressions 2047 ============================================= 2048 2049 A âbracket expressionâ is a list of characters enclosed by â[â and â]â. 2050 It matches any single character in that list; if the first character of 2051 the list is the caret â^â, then it matches any character *not* in the 2052 list. 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 2059 without the â-Eâ/â-râ options). 2060 2061 Within a bracket expression, a ârange expressionâ consists of two 2062 characters separated by a hyphen. It matches any single character that 2063 sorts between the two characters, inclusive. In the default C locale, 2064 the sorting sequence is the native character order; for example, â[a-d]â 2065 is equivalent to â[abcd]â. 2066 2067 Finally, certain named classes of characters are predefined within 2068 bracket expressions, as follows. 2069 2070 These named classes must be used _inside_ brackets themselves. 2071 Correct usage: 2072 $ echo 1 | sed 's/[[:digit:]]/X/' 2073 X 2074 2075 Incorrect usage is rejected by newer âsedâ versions. Older versions 2076 accepted it but treated it as a single bracket expression (which is 2077 equivalent 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 2134 names, and must be included in addition to the brackets delimiting the 2135 bracket expression. 2136 2137 Most meta-characters lose their special meaning inside bracket 2138 expressions: 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 2156 within 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, 2159 equivalence classes, and character classes, respectively, and â[â is 2160 therefore special within LIST when it is followed by â.â, â=â, or â:â. 2161 Also, 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 2184 File: sed.info, Node: regexp extensions, Next: Back-references and Subexpressions, Prev: Character Classes and Bracket Expressions, Up: sed regular expressions 2185 2186 5.6 regular expression extensions 2187 ================================= 2188 2189 The 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 2193 extended: 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 2271 File: sed.info, Node: Back-references and Subexpressions, Next: Escapes, Prev: regexp extensions, Up: sed regular expressions 2272 2273 5.7 Back-references and Subexpressions 2274 ====================================== 2275 2276 âback-referencesâ are regular expression commands which refer to a 2277 previous part of the matched regular expression. Back-references are 2278 specified with backslash and a single digit (e.g. â\1â). The part of 2279 the regular expression they refer to is called a âsubexpressionâ, and is 2280 designated with parentheses. 2281 2282 Back-references and subexpressions are used in two cases: in the 2283 regular 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 2288 the same content as a previously matched subexpression. In the 2289 following example, the subexpression is â.â - any single character 2290 (being surrounded by parentheses makes it a subexpression). The 2291 back-reference â\1â asks to match the same content (same character) as 2292 the sub-expression. 2293 2294 The command below matches words starting with any character, followed 2295 by 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 2307 left-to-right. This command searches for 6-letter palindromes (the 2308 first three letters are 3 subexpressions, followed by 3 back-references 2309 in 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 2315 part to refer back to subexpressions in the REGEXP part. 2316 2317 The following example uses two subexpressions in the regular 2318 expression to match two space-separated words. The back-references in 2319 the 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 2325 match then the back-reference makes the whole match fail. For example, 2326 âa(.)|b\1â will not match âbaâ. When multiple regular expressions are 2327 given with â-eâ or from a file (â-f FILEâ), back-references are local to 2328 each expression. 2329 2330 2331 File: sed.info, Node: Escapes, Next: Locale Considerations, Prev: Back-references and Subexpressions, Up: sed regular expressions 2332 2333 5.8 Escape Sequences - specifying special characters 2334 ==================================================== 2335 2336 Until this chapter, we have only encountered escapes of the form â\^â, 2337 which tell âsedâ not to interpret the circumflex as a special character, 2338 but rather to take it literally. For example, â\*â matches a single 2339 asterisk rather than zero or more backslashes. 2340 2341 This chapter introduces another kind of escape(1)âthat is, escapes 2342 that are applied to a character or sequence of characters that 2343 ordinarily are taken literally, and that âsedâ replaces with a special 2344 character. This provides a way of encoding non-printable characters in 2345 patterns in a visible manner. There is no restriction on the appearance 2346 of non-printing characters in a âsedâ script but when a script is being 2347 prepared in the shell or by text editing, it is usually easier to use 2348 one of the following escape sequences than the binary character it 2349 represents: 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 2389 existing âword boundaryâ meaning. 2390 2391 5.8.1 Escaping Precedence 2392 ------------------------- 2393 2394 GNU âsedâ processes escape sequences _before_ passing the text onto the 2395 regular-expression matching of the âs///â command and Address matching. 2396 Thus the following two commands are equivalent (â0x5eâ is the 2397 hexadecimal 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 2406 of â[â,â]â, 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 2414 unexpected 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 2425 exception of â\nâ. In basic regular expression mode, setting 2426 âPOSIXLY_CORRECTâ disables them inside bracket expressions. 2427 2428 2429 File: sed.info, Node: Locale Considerations, Prev: Escapes, Up: sed regular expressions 2430 2431 5.9 Multibyte characters and Locale Considerations 2432 ================================================== 2433 2434 GNU âsedâ processes valid multibyte characters in multibyte locales 2435 (e.g. âUTF-8â). (1) 2436 2437 The following example uses the Greek letter Capital Sigma (Σ, Unicode 2438 code point â0x03A3â). In a âUTF-8â locale, âsedâ correctly processes 2439 the 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 2453 To force âsedâ to process octets separately, use the âCâ locale (also 2454 known as the âPOSIXâ locale): 2455 2456 $ printf 'a\u03A3b' | LC_ALL=C sed 's/./X/g' 2457 XXXX 2458 2459 5.9.1 Invalid multibyte characters 2460 ---------------------------------- 2461 2462 âsedââs regular expressions _do not_ match invalid multibyte sequences 2463 in a multibyte locale. 2464 2465 In the following examples, the ascii value â0xCEâ is an incomplete 2466 multibyte character (shown here as ᅵ). The regular expression â.â does 2467 not 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 2479 Similarly, the âcatch-allâ regular expression â.*â does not match the 2480 entire line: 2481 2482 $ printf 'a\xCEc\n' | sed 's/.*//' | od -tx1c -An 2483 ce 63 0a 2484 c \n 2485 2486 GNU âsedâ offers the special âzâ command to clear the current pattern 2487 space 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 2494 Alternatively, 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 2502 to detect such invalid sequences in a file. In the following examples, 2503 the â\xCE\xCEâ is an invalid multibyte sequence, while â\xCE\A3â is a 2504 valid multibyte sequence (of the Greek Sigma character). 2505 2506 The following âsedâ program removes all valid characters using âs/.//gâ. 2507 Any content left in the pattern space (the invalid characters) are added 2508 to the hold space using the âHâ command. On the last line (â$â), the 2509 hold space is retrieved (âxâ), newlines are removed (âs/\n//gâ), and any 2510 remaining octets are printed unambiguously (âlâ). Thus, any invalid 2511 multibyte 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 2524 With a few more commands, âsedâ can print the exact line number 2525 corresponding to each invalid characters (line 3). These characters can 2526 then be removed by forcing the âCâ locale and using octal escape 2527 sequences: 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 2534 5.9.2 Upper/Lower case conversion 2535 --------------------------------- 2536 2537 GNU âsedââs substitute command (âsâ) supports upper/lower case 2538 conversions using â\Uâ,â\Lâ codes. These conversions support multibyte 2539 characters: 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 2549 5.9.3 Multibyte regexp character classes 2550 ---------------------------------------- 2551 2552 In other locales, the sorting sequence is not specified, and â[a-d]â 2553 might be equivalent to â[abcd]â or to â[aBbCcDd]â, or it might fail to 2554 match any character, or the set of characters that it matches might even 2555 be erratic. To obtain the traditional interpretation of bracket 2556 expressions, you can use the âCâ locale by setting the âLC_ALLâ 2557 environment 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 2566 current 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 2577 implementation. The examples shown are known to work as-expected on 2578 GNU/Linux systems using glibc. 2579 2580 2581 File: sed.info, Node: advanced sed, Next: Examples, Prev: sed regular expressions, Up: Top 2582 2583 6 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 2594 File: sed.info, Node: Execution Cycle, Next: Hold and Pattern Buffers, Up: advanced sed 2595 2596 6.1 How âsedâ Works 2597 =================== 2598 2599 âsedâ maintains two data buffers: the active _pattern_ space, and the 2600 auxiliary _hold_ space. Both are initially empty. 2601 2602 âsedâ operates by performing the following cycle on each line of 2603 input: first, âsedâ reads one line from the input stream, removes any 2604 trailing newline, and places it in the pattern space. Then commands are 2605 executed; each command can have an address associated to it: addresses 2606 are a kind of condition code, and a command is only executed if the 2607 condition 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 2610 use, the contents of pattern space are printed out to the output stream, 2611 adding back the trailing newline if it was removed.(1) Then the next 2612 cycle starts for the next input line. 2613 2614 Unless special commands (like âDâ) are used, the pattern space is 2615 deleted between two cycles. The hold space, on the other hand, keeps 2616 its data between cycles (see commands âhâ, âHâ, âxâ, âgâ, âGâ to move 2617 data between both buffers). 2618 2619 ---------- Footnotes ---------- 2620 2621 (1) Actually, if âsedâ prints a line without the terminating newline, 2622 it will nevertheless print the missing newline as soon as more text is 2623 sent to the same output stream, which gives the âleast expected 2624 surpriseâ even though it does not make commands like âsed -n pâ exactly 2625 identical to âcatâ. 2626 2627 2628 File: sed.info, Node: Hold and Pattern Buffers, Next: Multiline techniques, Prev: Execution Cycle, Up: advanced sed 2629 2630 6.2 Hold and Pattern Buffers 2631 ============================ 2632 2633 TODO 2634 2635 2636 File: sed.info, Node: Multiline techniques, Next: Branching and flow control, Prev: Hold and Pattern Buffers, Up: advanced sed 2637 2638 6.3 Multiline techniques - using D,G,H,N,P to process multiple lines 2639 ==================================================================== 2640 2641 Multiple 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 2644 data while respecting embedded newlines - allowing adding and removing 2645 lines 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â 2667 commands: 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 2739 lines:: and *note Line length adjustment::. 2740 2741 2742 File: sed.info, Node: Branching and flow control, Prev: Multiline techniques, Up: advanced sed 2743 2744 6.4 Branching and Flow Control 2745 ============================== 2746 2747 The 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 2751 continues to processes all commands in order. Commands without 2752 addresses affect all lines. Commands with addresses affect only 2753 matching lines. *Note Execution Cycle:: and *note Addresses overview::. 2754 2755 âsedâ does not support a typical âif/thenâ construct. Instead, some 2756 commands can be used as conditionals or to change the default flow 2757 control: 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 2799 lines containing â1â. The second example uses an address with negation 2800 (â!â) to perform substitution only on desired lines. The ây///â command 2801 is 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 2813 6.4.1 Branching and Cycles 2814 -------------------------- 2815 2816 The âbâ,âtâ and âTâ commands can be followed by a label (typically a 2817 single letter). Labels are defined with a colon followed by one or more 2818 letters (e.g. â:xâ). If the label is omitted the branch commands 2819 restart the cycle. Note the difference between branching to a label and 2820 restarting the cycle: when a cycle is restarted, âsedâ first prints the 2821 current content of the pattern space, then reads the next input line 2822 into the pattern space; Jumping to a label (even if it is at the 2823 beginning of the program) does not print the pattern space and does not 2824 read the next input line. 2825 2826 The following program is a no-op. The âbâ command (the only command 2827 in the program) does not have a label, and thus simply restarts the 2828 cycle. On each cycle, the pattern space is printed and the next input 2829 line 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 2837 doesnât print anything. The âbâ command jumps to the âxâ label, and a 2838 new 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 2847 commands read the next input line into the pattern space without waiting 2848 for the cycle to restart. Before reading the next input line, ânâ 2849 prints the current pattern space then empties it, while âNâ appends a 2850 newline 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 2888 6.4.2 Branching example: joining lines 2889 -------------------------------------- 2890 2891 As a real-world example of using branching, consider the case of 2892 quoted-printable (https://en.wikipedia.org/wiki/Quoted-printable) files, 2893 typically used to encode email messages. In these files long lines are 2894 split and marked with a âsoft line breakâ consisting of a single â=â 2895 character 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: 2915 If the current pattern space ends with a â=â, it reads the next input 2916 line using âNâ, replaces all â=â characters which are followed by a 2917 newline, and unconditionally branches (âbâ) to the beginning of the 2918 program without restarting a new cycle. If the pattern space does not 2919 ends with â=â, the default action is performed: the pattern space is 2920 printed 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 2929 all lines except the last, âNâ appends the line to the pattern space. A 2930 substitution command then removes soft line breaks (â=â at the end of a 2931 line, i.e. followed by a newline) by replacing them with an empty 2932 string. _if_ the substitution was successful (meaning the pattern space 2933 contained a line which should be joined), The conditional branch command 2934 âtâ jumps to the beginning of the program without completing or 2935 restarting the cycle. If the substitution failed (meaning there were no 2936 soft line breaks), The âtâ command will _not_ branch. Then, âPâ will 2937 print the pattern space content until the first newline, and âDâ will 2938 delete the pattern space content until the first new line. (To learn 2939 more 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 2950 File: sed.info, Node: Examples, Next: Limitations, Prev: advanced sed, Up: Top 2951 2952 7 Some Sample Scripts 2953 ********************* 2954 2955 Here are some âsedâ scripts to guide you in the art of mastering âsedâ. 2956 2957 * Menu: 2958 2959 2960 Useful one-liners: 2961 * Joining lines:: 2962 2963 Some 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 2973 Emulating 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 2988 File: sed.info, Node: Joining lines, Next: Centering lines, Up: Examples 2989 2990 7.1 Joining lines 2991 ================= 2992 2993 This section uses âNâ, âDâ and âPâ commands to process multiple lines, 2994 and the âbâ and âtâ commands for branching. *Note Multiline 2995 techniques:: 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 3057 File: sed.info, Node: Centering lines, Next: Increment a number, Prev: Joining lines, Up: Examples 3058 3059 7.2 Centering Lines 3060 =================== 3061 3062 This script centers all lines of a file on a 80 columns width. To 3063 change that width, the number in â\{...\}â must be replaced, and the 3064 number of added spaces also must be changed. 3065 3066 Note how the buffer commands are used to separate parts in the 3067 regular 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 3094 File: sed.info, Node: Increment a number, Next: Rename files to lower case, Prev: Centering lines, Up: Examples 3095 3096 7.3 Increment a Number 3097 ====================== 3098 3099 This 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 3103 the following digit. There is one exception: when the digit is a nine 3104 the previous digits must be also incremented until you donât have a 3105 nine. 3106 3107 This solution by Bruno Haible is very clever and smart because it 3108 uses a single buffer; if you donât have this limitation, the algorithm 3109 used in *note Numbering lines: cat -n, is faster. It works by replacing 3110 trailing nines with an underscore, then using multiple âsâ commands to 3111 increment the last digit, and then again substituting underscores with 3112 zeros. 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 3144 calculator! It is distributed together with sed. 3145 3146 3147 File: sed.info, Node: Rename files to lower case, Next: Print bash environment, Prev: Increment a number, Up: Examples 3148 3149 7.4 Rename Files to Lower Case 3150 ============================== 3151 3152 This is a pretty strange use of âsedâ. We transform text, and transform 3153 it to be shell commands, then just feed them to shell. Donât worry, 3154 even worse hacks are done when using âsedâ; I have seen a script 3155 converting the output of âdateâ into a âbcâ program! 3156 3157 The main body of this is the âsedâ script, which remaps the name from 3158 lower to upper (or vice-versa) and even checks out if the remapped name 3159 is the same as the original name. Note how the script is parameterized 3160 using 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 3259 File: sed.info, Node: Print bash environment, Next: Reverse chars of lines, Prev: Rename files to lower case, Up: Examples 3260 3261 7.5 Print âbashâ Environment 3262 ============================ 3263 3264 This script strips the definition of the shell functions from the output 3265 of 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 3293 File: sed.info, Node: Reverse chars of lines, Next: Text search across multiple lines, Prev: Print bash environment, Up: Examples 3294 3295 7.6 Reverse Characters of Lines 3296 =============================== 3297 3298 This script can be used to reverse the position of characters in lines. 3299 The technique moves two characters at a time, hence it is faster than 3300 more intuitive implementations. 3301 3302 Note the âtxâ command before the definition of the label. This is 3303 often 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 3306 reversing 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 3330 example 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 3339 File: sed.info, Node: Text search across multiple lines, Next: Line length adjustment, Prev: Reverse chars of lines, Up: Examples 3340 3341 7.7 Text search across multiple lines 3342 ===================================== 3343 3344 This section uses âNâ and âDâ commands to search for consecutive words 3345 spanning multiple lines. *Note Multiline techniques::. 3346 3347 These examples deal with finding doubled occurrences of words in a 3348 document. 3349 3350 Finding doubled words in a single line is easy using GNU âgrepâ and 3351 similarly 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 3391 will 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 3394 multiple lines (that is, multiple lines are stored in the pattern space, 3395 and 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 3425 File: sed.info, Node: Line length adjustment, Next: Adding a header to multiple files, Prev: Text search across multiple lines, Up: Examples 3426 3427 7.8 Line length adjustment 3428 ========================== 3429 3430 This section uses âNâ and âPâ commands to read and write lines, and the 3431 âbâ command for branching. *Note Multiline techniques:: and *note 3432 Branching and flow control::. 3433 3434 This (somewhat contrived) example deal with formatting and wrapping 3435 lines 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 3447 The 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 3483 The 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 3490 File: sed.info, Node: Adding a header to multiple files, Next: tac, Prev: Line length adjustment, Up: Examples 3491 3492 7.9 Adding a header to multiple files 3493 ===================================== 3494 3495 GNU âsedâ can be used to safely modify multiple files at once. 3496 3497 Add a single line to the beginning of source code files: 3498 3499 sed -i '1i/* Copyright (C) FOO BAR */' *.c 3500 3501 Adding 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 3506 case 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 3532 typically 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 3560 in all subdirectories, âxargsâ to run additional commands on selected 3561 files and âgrepâ to filter out files that already contain a copyright 3562 notice: 3563 3564 find \( -iname '*.cpp' -o -iname '*.c' -o -iname '*.h' \) \ 3565 | xargs grep -Li copyright \ 3566 | xargs -r sed -i '0rLIC.TXT' 3567 3568 Or 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â 3575 version 4.9 or later. *Note Zero Address::. 3576 3577 3578 File: sed.info, Node: tac, Next: cat -n, Prev: Adding a header to multiple files, Up: Examples 3579 3580 7.10 Reverse Lines of Files 3581 =========================== 3582 3583 This one begins a series of totally useless (yet interesting) scripts 3584 emulating various Unix commands. This, in particular, is a âtacâ 3585 workalike. 3586 3587 Note that on implementations other than GNU âsedâ this script might 3588 easily 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 3605 File: sed.info, Node: cat -n, Next: cat -b, Prev: tac, Up: Examples 3606 3607 7.11 Numbering Lines 3608 ==================== 3609 3610 This script replaces âcat -nâ; in fact it formats its output exactly 3611 like GNU âcatâ does. 3612 3613 Of course this is completely useless and for two reasons: first, 3614 because somebody else did it in C, second, because the following 3615 Bourne-shell script could be used for the same purpose and would be much 3616 faster: 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 3626 using âNâ. Of course, this script does not teach as much as the one 3627 presented below. 3628 3629 The algorithm used for incrementing uses both buffers, so the line is 3630 printed as soon as possible and then discarded. The number is split so 3631 that changing digits go in a buffer and unchanged ones go in the other; 3632 the changed digits are modified in a single step (using a âyâ command). 3633 The line number for the next line is then composed and stored in the 3634 hold 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 3674 File: sed.info, Node: cat -b, Next: wc -c, Prev: cat -n, Up: Examples 3675 3676 7.12 Numbering Non-blank Lines 3677 ============================== 3678 3679 Emulating âcat -bâ is almost the same as âcat -nââwe only have to select 3680 which 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 3683 commented to show how important it is to comment âsedâ scripts 3684 properly... 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 3714 File: sed.info, Node: wc -c, Next: wc -w, Prev: cat -b, Up: Examples 3715 3716 7.13 Counting Characters 3717 ======================== 3718 3719 This script shows another way to do arithmetic with âsedâ. In this case 3720 we have to add possibly large numbers, so implementing this by 3721 successive increments would not be feasible (and possibly even more 3722 complicated to contrive than this script). 3723 3724 The approach is to map numbers to letters, kind of an abacus 3725 implemented with âsedâ. âaâs are units, âbâs are tens and so on: we 3726 simply add the number of characters on the current line as units, and 3727 then 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 3732 the 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; 3734 then we rotate letters so that tens become âaâs, and so on until no more 3735 letters 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 3787 File: sed.info, Node: wc -w, Next: wc -l, Prev: wc -c, Up: Examples 3788 3789 7.14 Counting Words 3790 =================== 3791 3792 This script is almost the same as the previous one, once each of the 3793 words on the line is converted to a single âaâ (in the previous script 3794 each 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 3798 characters. This scriptâs bottleneck, instead, is arithmetic, and hence 3799 the 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 3802 commenting â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 3844 File: sed.info, Node: wc -l, Next: head, Prev: wc -w, Up: Examples 3845 3846 7.15 Counting Lines 3847 =================== 3848 3849 No strange things are done now, because âsedâ gives us âwc -lâ 3850 functionality for free!!! Look: 3851 3852 #!/usr/bin/sed -nf 3853 $= 3854 3855 3856 File: sed.info, Node: head, Next: tail, Prev: wc -l, Up: Examples 3857 3858 7.16 Printing the First Lines 3859 ============================= 3860 3861 This script is probably the simplest useful âsedâ script. It displays 3862 the first 10 lines of input; the number of displayed lines is right 3863 before the âqâ command. 3864 3865 #!/usr/bin/sed -f 3866 10q 3867 3868 3869 File: sed.info, Node: tail, Next: uniq, Prev: head, Up: Examples 3870 3871 7.17 Printing the Last Lines 3872 ============================ 3873 3874 Printing the last N lines rather than the first is more complex but 3875 indeed possible. N is encoded in the second line, before the bang 3876 character. 3877 3878 This script is similar to the âtacâ script in that it keeps the final 3879 output 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 3889 adding a line and deleting the oldest (the substitution command on the 3890 second 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 3893 efficient and complex âsedâ scripts, because commands like âPâ would 3894 require a lot of work if implemented manually. 3895 3896 To introduce the technique, which is fully demonstrated in the rest 3897 of this chapter and is based on the âNâ, âPâ and âDâ commands, here is 3898 an implementation of âtailâ using a simple âsliding window.â 3899 3900 This looks complicated but in fact the working is the same as the 3901 last script: after we have kicked in the appropriate number of lines, 3902 however, we stop using the hold space to keep inter-line state, and 3903 instead 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 3915 first ten lines of input. After that, all the script does is: exiting 3916 on the last line of input, appending the next input line to pattern 3917 space, and removing the first line. 3918 3919 3920 File: sed.info, Node: uniq, Next: uniq -d, Prev: tail, Up: Examples 3921 3922 7.18 Make Duplicate Lines Unique 3923 ================================ 3924 3925 This is an example of the art of using the âNâ, âPâ and âDâ commands, 3926 probably 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 3951 technique is often used in advanced âsedâ scripts. 3952 3953 3954 File: sed.info, Node: uniq -d, Next: uniq -u, Prev: uniq, Up: Examples 3955 3956 7.19 Print Duplicated Lines of Input 3957 ==================================== 3958 3959 This 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 3988 File: sed.info, Node: uniq -u, Next: cat -s, Prev: uniq -d, Up: Examples 3989 3990 7.20 Remove All Duplicated Lines 3991 ================================ 3992 3993 This 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 4023 File: sed.info, Node: cat -s, Prev: uniq -u, Up: Examples 4024 4025 7.21 Squeezing Blank Lines 4026 ========================== 4027 4028 As a final example, here are three scripts, of increasing complexity and 4029 speed, that implement the same function as âcat -sâ, that is squeezing 4030 blank lines. 4031 4032 The first leaves a blank line at the beginning and end if there are 4033 some 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 4051 beginning. 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 4070 fastest. Note that loops are completely done with ânâ and âbâ, without 4071 relying on âsedâ to restart the script automatically at the end of a 4072 line. 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 4104 File: sed.info, Node: Limitations, Next: Other Resources, Prev: Examples, Up: Top 4105 4106 8 GNU âsedââs Limitations and Non-limitations 4107 ********************************************* 4108 4109 For those who want to write portable âsedâ scripts, be aware that some 4110 implementations have been known to limit line lengths (for the pattern 4111 and hold spaces) to be no more than 4000 bytes. The POSIX standard 4112 specifies that conforming âsedâ implementations shall support at least 4113 8192 byte line lengths. GNU âsedâ has no built-in limit on line length; 4114 as long as it can âmalloc()â more (virtual) memory, you can feed or 4115 construct lines as long as you like. 4116 4117 However, recursion is used to handle subpatterns and indefinite 4118 repetition. This means that the available stack space may limit the 4119 size of the buffer that can be processed by certain patterns. 4120 4121 4122 File: sed.info, Node: Other Resources, Next: Reporting Bugs, Prev: Limitations, Up: Top 4123 4124 9 Other Resources for Learning About âsedâ 4125 ****************************************** 4126 4127 For 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 4131 the 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â 4136 developers. 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 4149 File: sed.info, Node: Reporting Bugs, Next: GNU Free Documentation License, Prev: Other Resources, Up: Top 4150 4151 10 Reporting Bugs 4152 ***************** 4153 4154 Email bug reports to <bug-sed@gnu.org>. Also, please include the output 4155 of â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 4164 extra minutes to identify the specific problem and make a stand-alone 4165 test case. Unlike other programs such as C compilers, making such test 4166 cases for âsedâ is quite simple. 4167 4168 A stand-alone test case includes all the data necessary to perform 4169 the test, and the specific invocation of âsedâ that causes the problem. 4170 The smaller a stand-alone test case is, the better. A test case should 4171 not involve something as far removed from âsedâ as âtry to configure 4172 frobme-1.3.4â. Yes, that is in principle enough information to look for 4173 the 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 4208 Regex 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 4309 File: sed.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Reporting Bugs, Up: Top 4310 4311 Appendix 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 4759 ADDENDUM: How to use this License for your documents 4760 ==================================================== 4761 4762 To use this License in a document you have written, include a copy of 4763 the License in the document and put the following copyright and license 4764 notices 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 4775 Texts, 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 4782 combination of the three, merge those two alternatives to suit the 4783 situation. 4784 4785 If your document contains nontrivial examples of program code, we 4786 recommend releasing these examples in parallel under your choice of free 4787 software license, such as the GNU General Public License, to permit 4788 their use in free software. 4789 4790 4791 File: sed.info, Node: Concept Index, Next: Command and Option Index, Prev: GNU Free Documentation License, Up: Top 4792 4793 Concept Index 4794 ************* 4795 4796 This is a general index of all issues discussed in this manual, with the 4797 exception 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 5177 File: sed.info, Node: Command and Option Index, Prev: Concept Index, Up: Top 5178 5179 Command and Option Index 5180 ************************ 5181 5182 This is an alphabetical list of all âsedâ commands and command-line 5183 options. 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 30 5310 31 5311 Tag 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 5312 Node: Top738 5313 Node: Introduction2217 5314 Node: Invoking sed2789 5315 Node: Overview3114 5316 Node: Command-Line Options5561 5317 Ref: Command-Line Options-Footnote-113530 5318 Ref: Command-Line Options-Footnote-213758 5319 Node: Exit status13861 5320 Node: sed scripts14795 5321 Node: sed script overview15394 5322 Node: sed commands list18057 5323 Node: The "s" Command23070 5324 Ref: The "s" Command-Footnote-128889 5325 Node: Common Commands28969 5326 Node: Other Commands32106 5327 Ref: insert command35324 5328 Ref: Other Commands-Footnote-141629 5329 Node: Programming Commands41709 5330 Node: Extended Commands42649 5331 Node: Multiple commands syntax46675 5332 Node: sed addresses51217 5333 Node: Addresses overview51706 5334 Node: Numeric Addresses53705 5335 Node: Regexp Addresses55116 5336 Ref: Regexp Addresses-Footnote-159252 5337 Node: Range Addresses59392 5338 Ref: Zero Address Regex Range60294 5339 Node: Zero Address61753 5340 Node: sed regular expressions62318 5341 Node: Regular Expressions Overview63172 5342 Node: BRE vs ERE64733 5343 Node: BRE syntax66484 5344 Node: ERE syntax73304 5345 Node: Character Classes and Bracket Expressions74878 5346 Node: regexp extensions80030 5347 Node: Back-references and Subexpressions82506 5348 Node: Escapes84958 5349 Ref: Escapes-Footnote-188105 5350 Node: Locale Considerations88304 5351 Ref: Locale Considerations-Footnote-193067 5352 Node: advanced sed93239 5353 Node: Execution Cycle93606 5354 Ref: Execution Cycle-Footnote-194845 5355 Node: Hold and Pattern Buffers95162 5356 Node: Multiline techniques95350 5357 Node: Branching and flow control98704 5358 Node: Examples107029 5359 Node: Joining lines108275 5360 Node: Centering lines110082 5361 Node: Increment a number111006 5362 Ref: Increment a number-Footnote-1112495 5363 Node: Rename files to lower case112623 5364 Node: Print bash environment115418 5365 Node: Reverse chars of lines116181 5366 Ref: Reverse chars of lines-Footnote-1117224 5367 Node: Text search across multiple lines117441 5368 Node: Line length adjustment120786 5369 Node: Adding a header to multiple files122533 5370 Node: tac125986 5371 Node: cat -n126774 5372 Node: cat -b128616 5373 Node: wc -c129378 5374 Ref: wc -c-Footnote-1131316 5375 Node: wc -w131385 5376 Node: wc -l132875 5377 Node: head133128 5378 Node: tail133467 5379 Node: uniq135196 5380 Node: uniq -d136007 5381 Node: uniq -u136722 5382 Node: cat -s137435 5383 Node: Limitations139298 5384 Node: Other Resources140161 5385 Node: Reporting Bugs141104 5386 Ref: N_command_last_line142294 5387 Ref: Reporting Bugs-Footnote-1148805 5388 Node: GNU Free Documentation License148880 5389 Node: Concept Index174239 5390 Node: Command and Option Index201600 80 5391 81 5392 End Tag Table 5393 5394 5395 Local Variables: 5396 coding: utf-8 5397 End:
Note:
See TracChangeset
for help on using the changeset viewer.