heirloom-ed

annotate ed.1 @ 4:4165f1b57d18

Become SUSv3 compatible and thus remove own regexp code The Heirloom tools can be compiled to comply to several standards. This version does not need this flexibility. We can omit the regexp code and use the system's, by using the SU3 variant of ed. This is the latest of the supported standards.
author markus schnalke <meillo@marmaro.de>
date Mon, 13 Apr 2015 17:26:51 +0200
parents a09d0630f05b
children
rev   line source
meillo@0 1 '\" t
meillo@0 2 .\" Sccsid @(#)ed.1 1.48 (gritter) 6/22/05
meillo@0 3 .\" Parts taken from ed(1), Unix 7th edition:
meillo@0 4 .\" Copyright(C) Caldera International Inc. 2001-2002. All rights reserved.
meillo@0 5 .\"
meillo@0 6 .\" Redistribution and use in source and binary forms, with or without
meillo@0 7 .\" modification, are permitted provided that the following conditions
meillo@0 8 .\" are met:
meillo@0 9 .\" Redistributions of source code and documentation must retain the
meillo@0 10 .\" above copyright notice, this list of conditions and the following
meillo@0 11 .\" disclaimer.
meillo@0 12 .\" Redistributions in binary form must reproduce the above copyright
meillo@0 13 .\" notice, this list of conditions and the following disclaimer in the
meillo@0 14 .\" documentation and/or other materials provided with the distribution.
meillo@0 15 .\" All advertising materials mentioning features or use of this software
meillo@0 16 .\" must display the following acknowledgement:
meillo@0 17 .\" This product includes software developed or owned by Caldera
meillo@0 18 .\" International, Inc.
meillo@0 19 .\" Neither the name of Caldera International, Inc. nor the names of
meillo@0 20 .\" other contributors may be used to endorse or promote products
meillo@0 21 .\" derived from this software without specific prior written permission.
meillo@0 22 .\"
meillo@0 23 .\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
meillo@0 24 .\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
meillo@0 25 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
meillo@0 26 .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
meillo@0 27 .\" ARE DISCLAIMED. IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE
meillo@0 28 .\" LIABLE FOR ANY DIRECT, INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR
meillo@0 29 .\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
meillo@0 30 .\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
meillo@0 31 .\" BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
meillo@0 32 .\" WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
meillo@0 33 .\" OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
meillo@0 34 .\" EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
meillo@0 35 .TH ED 1 "6/22/05" "Heirloom Toolchest" "User Commands"
meillo@0 36 .if t .ds q \(aa
meillo@0 37 .if n .ds q '
meillo@0 38 .SH NAME
meillo@0 39 ed \- text editor
meillo@0 40 .SH SYNOPSIS
meillo@2 41 \fBed\fR [\fB\-\fR\] [\fIname\fR]
meillo@0 42 .SH DESCRIPTION
meillo@0 43 .I Ed
meillo@0 44 is the standard text editor.
meillo@0 45 .PP
meillo@0 46 If a
meillo@0 47 .I name
meillo@0 48 argument is given,
meillo@0 49 .I ed
meillo@0 50 simulates an
meillo@0 51 .I e
meillo@0 52 command (see below)\| on the named file; that is to say,
meillo@0 53 the file is read into
meillo@0 54 .IR ed 's
meillo@0 55 buffer so that it can be edited.
meillo@0 56 The optional
meillo@0 57 .B \-
meillo@0 58 suppresses the printing
meillo@0 59 of character counts by
meillo@0 60 .IR e ,
meillo@0 61 .IR r ,
meillo@0 62 and
meillo@0 63 .I w
meillo@0 64 commands,
meillo@0 65 and of the `!' after completion of a shell command.
meillo@0 66 .PP
meillo@0 67 .I Ed
meillo@0 68 operates on a copy of any file it is editing; changes made
meillo@0 69 in the copy have no effect on the file until a
meillo@0 70 .IR w ""
meillo@0 71 (write)\|
meillo@0 72 command is given.
meillo@0 73 The copy of the text being edited resides
meillo@0 74 in a temporary file called the
meillo@0 75 .IR buffer .
meillo@0 76 .PP
meillo@0 77 Commands to
meillo@0 78 .I ed
meillo@0 79 have a simple and regular structure: zero or
meillo@0 80 more
meillo@0 81 .I addresses
meillo@0 82 followed by a single character
meillo@0 83 .I command,
meillo@0 84 possibly
meillo@0 85 followed by parameters to the command.
meillo@0 86 These addresses specify one or more lines in the buffer.
meillo@0 87 Missing addresses are supplied by default.
meillo@0 88 .PP
meillo@0 89 In general, only one command may appear on a line.
meillo@0 90 Certain commands allow the
meillo@0 91 addition of text to the buffer.
meillo@0 92 While
meillo@0 93 .I ed
meillo@0 94 is accepting text, it is said
meillo@0 95 to be in
meillo@0 96 .I "input mode."
meillo@0 97 In this mode, no commands are recognized;
meillo@0 98 all input is merely collected.
meillo@0 99 Input mode is left by typing a period `\fB.\fR' alone at the
meillo@0 100 beginning of a line.
meillo@0 101 .PP
meillo@0 102 .I Ed
meillo@0 103 supports a limited form of
meillo@0 104 .I "regular expression"
meillo@0 105 notation.
meillo@0 106 A regular expression specifies
meillo@0 107 a set of strings of characters.
meillo@0 108 A member of this set of strings is said to be
meillo@0 109 .I matched
meillo@0 110 by the regular expression.
meillo@0 111 In the following specification for regular expressions
meillo@0 112 the word `character' means any character but newline.
meillo@0 113 .B ed
meillo@0 114 uses simple regular expressions.
meillo@0 115 .SS "Simple Regular Expressions"
meillo@0 116 .IP 1.
meillo@0 117 Any character except a special character
meillo@0 118 matches itself.
meillo@0 119 Special characters are
meillo@0 120 the regular expression delimiter plus
meillo@0 121 .RB \e\|[\| .
meillo@0 122 and sometimes ^\|*\|$.
meillo@0 123 .IP 2.
meillo@0 124 A
meillo@0 125 .B .\&
meillo@0 126 matches any character.
meillo@0 127 .IP 3.
meillo@0 128 A \fB\e\fR followed by any character except a digit
meillo@0 129 or (\|) {\|} <\|> matches that character.
meillo@0 130 .IP 4.
meillo@0 131 A nonempty string
meillo@0 132 .I s
meillo@0 133 bracketed
meillo@0 134 \fB[\fI\|s\|\fB]\fR
meillo@0 135 (or
meillo@0 136 \fB[^\fIs\|\fB]\fR)
meillo@0 137 forms a \fIbracket expression\fR that
meillo@0 138 matches any character in (or not in)
meillo@0 139 .I s.
meillo@0 140 In
meillo@0 141 .I s,
meillo@0 142 \e has no special meaning, and ] may only appear as
meillo@0 143 the first letter.
meillo@0 144 A substring
meillo@0 145 \fIa\fB\-\fIb\fR,
meillo@0 146 with
meillo@0 147 .I a
meillo@0 148 and
meillo@0 149 .I b
meillo@0 150 in ascending ASCII order, stands for the inclusive
meillo@0 151 range of ASCII characters.
meillo@0 152 .IP 5.
meillo@0 153 A regular expression of form 1-4 followed by \fB*\fR matches a sequence of
meillo@0 154 0 or more matches of the regular expression.
meillo@0 155 .IP 6.
meillo@0 156 A regular expression of form 1-4
meillo@0 157 followed by \fB\e{\fIm\fB,\fIn\fB\e}\fR
meillo@0 158 forms an \fIinterval expression\fR that
meillo@0 159 matches a sequence of \fIm\fR through \fIn\fR matches, inclusive,
meillo@0 160 of the regular expression.
meillo@0 161 The values of \fIm\fR and \fIn\fR must be non-negative
meillo@0 162 and smaller than 256.
meillo@0 163 The form \fB\e{\fIm\fB\e}\fR matches exactly \fIm\fR occurrences,
meillo@0 164 \fB\e{\fIm\fB,\e}\fR matches at least \fIm\fR occurrences.
meillo@0 165 .IP 7.
meillo@0 166 The sequence \fB\e<\fR forces the match
meillo@0 167 to occur only at the beginning of a ``variable'' or ``word'';
meillo@0 168 that is, either at the beginning of a line,
meillo@0 169 or just before a letter, digit or underline
meillo@0 170 and after a character not one of these.
meillo@0 171 .IP 8.
meillo@0 172 The sequence \fB\e>\fR matches the end
meillo@0 173 of a ``variable'' or ``word'',
meillo@0 174 i.\|e. either the end of the line
meillo@0 175 or before character which is neither a letter,
meillo@0 176 nor a digit, nor the underline character.
meillo@0 177 .IP 9.
meillo@0 178 A regular expression,
meillo@0 179 .I x,
meillo@0 180 of form 1-11, parenthesized
meillo@0 181 \fB\e(\fI\|x\|\fB\e)\fR
meillo@0 182 is called a \fIsubexpression\fR and
meillo@0 183 matches what
meillo@0 184 .I x
meillo@0 185 matches.
meillo@0 186 .IP 10.
meillo@0 187 A \fB\e\fR followed by a digit
meillo@0 188 .I n
meillo@0 189 forms a \fIbackreference\fR and
meillo@0 190 matches a copy of the string that the
meillo@0 191 parenthesized regular expression beginning with the
meillo@0 192 .IR n th
meillo@0 193 \e( matched.
meillo@0 194 .IP 11.
meillo@0 195 A regular expression of form 1-11,
meillo@0 196 .I x,
meillo@0 197 followed by a regular expression of form 1-10,
meillo@0 198 .I y
meillo@0 199 matches a match for
meillo@0 200 .I x
meillo@0 201 followed by a match for
meillo@0 202 .I y,
meillo@0 203 with the
meillo@0 204 .I x
meillo@0 205 match being as long as possible while still permitting a
meillo@0 206 .I y
meillo@0 207 match.
meillo@0 208 .IP 12.
meillo@0 209 A regular expression of form 1-11 preceded by \fB^\fR
meillo@0 210 (or followed by \fB$\fR), is constrained to matches that
meillo@0 211 begin at the left (or end at the right) end of a line
meillo@0 212 (\fIanchoring\fR).
meillo@0 213 .IP 13.
meillo@0 214 A regular expression of form 1-12 picks out the
meillo@0 215 longest among the leftmost matches in a line.
meillo@0 216 .IP 14.
meillo@0 217 An empty regular expression stands for a copy of the
meillo@0 218 last regular expression encountered.
meillo@0 219 .PP
meillo@0 220 Regular expressions are used in addresses to specify
meillo@0 221 lines and in one command
meillo@0 222 (see
meillo@0 223 .I s
meillo@0 224 below)\|
meillo@0 225 to specify a portion of a line which is to be replaced.
meillo@0 226 If it is desired to use one of
meillo@0 227 the regular expression metacharacters as an ordinary
meillo@0 228 character, that character may be preceded by `\e'.
meillo@0 229 This also applies to the character bounding the regular
meillo@0 230 expression (often `/')\| and to `\e' itself.
meillo@0 231 .PP
meillo@0 232 To understand addressing in
meillo@0 233 .I ed
meillo@0 234 it is necessary to know that at any time there is a
meillo@0 235 .I "current line."
meillo@0 236 Generally speaking, the current line is
meillo@0 237 the last line affected by a command; however,
meillo@0 238 the exact effect on the current line
meillo@0 239 is discussed under the description of
meillo@0 240 the command.
meillo@0 241 Addresses are constructed as follows.
meillo@0 242 .TP
meillo@0 243 1.
meillo@0 244 The character `\fB.\fR' addresses the current line.
meillo@0 245 .TP
meillo@0 246 2.
meillo@0 247 The character `\fB$\fR' addresses the last line of the buffer.
meillo@0 248 .TP
meillo@0 249 3.
meillo@0 250 A decimal number
meillo@0 251 .I n
meillo@0 252 addresses the
meillo@0 253 .IR n -th
meillo@0 254 line of the buffer.
meillo@0 255 .TP
meillo@0 256 4.
meillo@0 257 `\fB\(fm\fIx\fR' addresses the line marked with the name
meillo@0 258 .IR x ,
meillo@0 259 which must be a lower-case letter.
meillo@0 260 Lines are marked with the
meillo@0 261 .I k
meillo@0 262 command described below.
meillo@0 263 .TP
meillo@0 264 5.
meillo@0 265 A regular expression enclosed in slashes `\fB/\fR' addresses
meillo@0 266 the line found by searching forward from the current line
meillo@0 267 and stopping at the first line containing a
meillo@0 268 string that matches the regular expression.
meillo@0 269 If necessary the search wraps around to the beginning of the
meillo@0 270 buffer.
meillo@0 271 .TP
meillo@0 272 6.
meillo@0 273 A regular expression enclosed in queries `\fB?\fR' addresses
meillo@0 274 the line found by searching backward from the current line
meillo@0 275 and stopping at the first line containing
meillo@0 276 a string that matches the regular expression.
meillo@0 277 If necessary
meillo@0 278 the search wraps around to the end of the buffer.
meillo@0 279 .TP
meillo@0 280 7.
meillo@0 281 An address followed by a plus sign `\fB+\fR'
meillo@0 282 or a minus sign `\fB\-\fR' followed by a decimal number
meillo@0 283 specifies that address plus
meillo@0 284 (resp. minus)\| the indicated number of lines.
meillo@0 285 The plus sign may be omitted.
meillo@0 286 .TP
meillo@0 287 8.
meillo@0 288 If an address begins with `\fB+\fR' or `\fB\-\fR'
meillo@0 289 the addition or subtraction is taken with respect to the current line;
meillo@0 290 e.g. `\-5' is understood to mean `\fB.\fR\-5'.
meillo@0 291 .TP
meillo@0 292 9.
meillo@0 293 If an address ends with `\fB+\fR' or `\fB\-\fR',
meillo@0 294 then 1 is added (resp. subtracted).
meillo@0 295 As a consequence of this rule and rule 8,
meillo@0 296 the address `\-' refers to the line before the current line.
meillo@0 297 Moreover,
meillo@0 298 trailing
meillo@0 299 `+' and `\-' characters
meillo@0 300 have cumulative effect, so `\-\-' refers to the current
meillo@0 301 line less 2.
meillo@0 302 .TP
meillo@0 303 10.
meillo@0 304 To maintain compatibility with earlier versions of the editor,
meillo@0 305 the character `\fB^\fR' in addresses is
meillo@0 306 equivalent to `\-'.
meillo@0 307 .PP
meillo@0 308 Commands may require zero, one, or two addresses.
meillo@0 309 Commands which require no addresses regard the presence
meillo@0 310 of an address as an error.
meillo@0 311 Commands which accept one or two addresses
meillo@0 312 assume default addresses when insufficient are given.
meillo@0 313 If more addresses are given than such a command requires,
meillo@0 314 the last one or two (depending on what is accepted)\| are used.
meillo@0 315 .PP
meillo@0 316 Addresses are separated from each other typically by a comma
meillo@0 317 `\fB,\fR'.
meillo@0 318 They may also be separated by a semicolon
meillo@0 319 `\fB;\fR'.
meillo@0 320 In this case the current line `\fB.\fR' is set to
meillo@0 321 the previous address before the next address is interpreted.
meillo@0 322 This feature can be used to determine the starting
meillo@0 323 line for forward and backward searches (`/', `?')\|.
meillo@0 324 The second address of any two-address sequence
meillo@0 325 must correspond to a line following the line corresponding to the first address.
meillo@0 326 .PP
meillo@0 327 Omission of the first address causes
meillo@0 328 the first line to be used with `,',
meillo@0 329 or the current line with `;', respectively;
meillo@0 330 if the second address is also omitted,
meillo@0 331 the last line of the buffer is used.
meillo@0 332 Thus a single `,' specifies the entire contents of the buffer,
meillo@0 333 and a single `;' specifies the contents
meillo@0 334 ranging from the current line to the last one.
meillo@0 335 .PP
meillo@0 336 In the following list of
meillo@0 337 .I ed
meillo@0 338 commands, the default addresses
meillo@0 339 are shown in parentheses.
meillo@0 340 The parentheses are not part of
meillo@0 341 the address, but are used to show that the given addresses are
meillo@0 342 the default.
meillo@0 343 .PP
meillo@0 344 As mentioned, it is generally illegal for more than one
meillo@0 345 command to appear on a line.
meillo@0 346 However, most commands may be suffixed by `p', `l', or `n',
meillo@0 347 in which case
meillo@0 348 the current line is either
meillo@0 349 printed, listed, or numbered respectively
meillo@0 350 in the way discussed below.
meillo@0 351 .TP 5
meillo@0 352 \fR(\|\fI.\|\fR)\fB\|a\fR
meillo@0 353 .br
meillo@0 354 .ns
meillo@0 355 .TP 5
meillo@0 356 <text>
meillo@0 357 .br
meillo@0 358 .ns
meillo@0 359 .TP 5
meillo@0 360 .B .
meillo@0 361 .br
meillo@0 362 The append command reads the given text
meillo@0 363 and appends it after the addressed line.
meillo@0 364 `\fB.\fR' is left
meillo@0 365 on the last line input, if there
meillo@0 366 were any, otherwise at the addressed line.
meillo@0 367 Address `0' is legal for this command; text is placed
meillo@0 368 at the beginning of the buffer.
meillo@0 369 .TP 5
meillo@0 370 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBc\fR
meillo@0 371 .br
meillo@0 372 .ns
meillo@0 373 .TP 5
meillo@0 374 <text>
meillo@0 375 .br
meillo@0 376 .ns
meillo@0 377 .TP 5
meillo@0 378 .B .
meillo@0 379 .br
meillo@0 380 The change
meillo@0 381 command deletes the addressed lines, then accepts input
meillo@0 382 text which replaces these lines.
meillo@0 383 `\fB.\fR' is left at the last line input; if there were none,
meillo@0 384 it is left at the line preceding the deleted lines.
meillo@0 385 .TP 5
meillo@0 386 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBd\fR
meillo@0 387 The delete command deletes the addressed lines from the buffer.
meillo@0 388 The line originally after the last line deleted becomes the current line;
meillo@0 389 if the lines deleted were originally at the end,
meillo@0 390 the new last line becomes the current line.
meillo@0 391 .TP 5
meillo@0 392 \fBe\ \fIfilename\fR
meillo@0 393 The edit
meillo@0 394 command causes the entire contents of the buffer to be deleted,
meillo@0 395 and then the named file to be read in.
meillo@0 396 `\fB.\fR' is set to the last line of the buffer.
meillo@0 397 The number of characters read is typed.
meillo@0 398 `\fIfilename\fR' is remembered for possible use as a default file name
meillo@0 399 in a subsequent
meillo@0 400 .I r
meillo@0 401 or
meillo@0 402 .I w
meillo@0 403 command.
meillo@0 404 If `\fIfilename\fR' is missing, the remembered name is used.
meillo@0 405 A `\fIfilename\fR' starting with a `\fB!\fR'
meillo@0 406 causes the output of the shell command following this character
meillo@0 407 to be read in.
meillo@0 408 .TP 5
meillo@0 409 \fBE\ \fIfilename\fR
meillo@0 410 This command is the same as
meillo@0 411 .IR e ,
meillo@0 412 except that no diagnostic results when no
meillo@0 413 .I w
meillo@0 414 has been given since the last buffer alteration.
meillo@0 415 .TP 5
meillo@0 416 \fBf\ \fIfilename\fR
meillo@0 417 The filename command prints the currently remembered file name.
meillo@0 418 If `\fIfilename\fR' is given,
meillo@0 419 the currently remembered file name is changed to `\fIfilename\fR'.
meillo@0 420 .TP 5
meillo@0 421 \fR(\fI1\fB,\fI$\fR)\|\fBg/\fIregular expression\fB/\fIcommand list\fR
meillo@0 422 In the global
meillo@0 423 command, the first step is to mark every line which matches
meillo@0 424 the given \fIregular expression\fR.
meillo@0 425 Then for every such line, the
meillo@0 426 given \fIcommand list\fR is executed
meillo@0 427 with `\fB.\fR' initially set to that line.
meillo@0 428 A single command or the first of multiple commands
meillo@0 429 appears on the same line with the global command.
meillo@0 430 All lines of a multi-line list except the last line must be ended with `\e'.
meillo@0 431 .I A,
meillo@0 432 .I i,
meillo@0 433 and
meillo@0 434 .I c
meillo@0 435 commands and associated input are permitted;
meillo@0 436 the `\fB.\fR' terminating input mode may be omitted if it would be on the
meillo@0 437 last line of the command list.
meillo@0 438 The commands
meillo@0 439 .I g
meillo@0 440 and
meillo@0 441 .I v
meillo@0 442 are not permitted in the command list.
meillo@0 443 .TP 5
meillo@0 444 \fR(\fI1\fB,\fI$\fR)\|\fBG/\fIregular expression\fB/\fR
meillo@0 445 The interactive global command
meillo@0 446 first marks every line matching the given \fIregular expression\fR.
meillo@0 447 Then each line is printed
meillo@0 448 and a command is read and executed for this line.
meillo@0 449 A single newline character causes the line to remain unchanged,
meillo@0 450 an isolated `\fB&\fR' repeats the command given for the previous line.
meillo@0 451 The command can be terminated by an interrupt signal.
meillo@0 452 .TP 5
meillo@0 453 .B h
meillo@0 454 This command prints a verbose description for the
meillo@0 455 last error encountered.
meillo@0 456 .TP
meillo@0 457 .B H
meillo@0 458 This command acts like the
meillo@0 459 .I h
meillo@0 460 command,
meillo@0 461 but also causes verbose descriptions to be printed
meillo@0 462 on all following error conditions.
meillo@0 463 Another
meillo@0 464 .I H
meillo@0 465 turns verbose mode off.
meillo@0 466 .TP 5
meillo@0 467 \fR(\|\fI.\|\fR)\|\fBi\fR
meillo@0 468 .br
meillo@0 469 .ns
meillo@0 470 .TP 5
meillo@0 471 <text>
meillo@0 472 .br
meillo@0 473 .ns
meillo@0 474 .TP 5
meillo@0 475 .B .
meillo@0 476 .br
meillo@0 477 This command inserts the given text before the addressed line.
meillo@0 478 `\fB.\fR' is left at the last line input, or, if there were none,
meillo@0 479 at the line before the addressed line.
meillo@0 480 This command differs from the
meillo@0 481 .I a
meillo@0 482 command only in the placement of the
meillo@0 483 text.
meillo@0 484 .TP 5
meillo@0 485 \fR(\|\fI.\|\fB,\|\fI.+1\fR)\|\fBj\fR
meillo@0 486 This command joins the addressed lines into a single line;
meillo@0 487 intermediate newlines simply disappear.
meillo@0 488 `\fB.\fR' is left at the resulting line.
meillo@0 489 .TP 5
meillo@0 490 \fR(\fI.\fR)\|\fBk\fIx\fR
meillo@0 491 The mark command marks the addressed line with
meillo@0 492 name
meillo@0 493 .IR x ,
meillo@0 494 which must be a lower-case letter.
meillo@0 495 The address form `\(fm\fIx\fR' then addresses this line.
meillo@0 496 .ne 2.5
meillo@0 497 .TP 5
meillo@0 498 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBl\fR
meillo@0 499 The list command
meillo@0 500 prints the addressed lines in an unambiguous way:
meillo@0 501 non-graphic control characters are printed in three-digit octal;
meillo@0 502 Long lines are folded.
meillo@0 503 The
meillo@0 504 .I l
meillo@0 505 command may be placed on the same line after any non-i/o
meillo@0 506 command.
meillo@0 507 .TP 5
meillo@0 508 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBm\fIa\fR
meillo@0 509 The move command repositions the addressed lines after the line
meillo@0 510 addressed by
meillo@0 511 .IR a .
meillo@0 512 The last of the moved lines becomes the current line.
meillo@0 513 .TP 5
meillo@0 514 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBn\fR
meillo@0 515 This command prints lines preceded by their line numbers.
meillo@0 516 It otherwise acts like the
meillo@0 517 .I p
meillo@0 518 command described below.
meillo@0 519 .TP 5
meillo@0 520 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBp\fR
meillo@0 521 The print command prints the addressed lines.
meillo@0 522 `\fB.\fR'
meillo@0 523 is left at the last line printed.
meillo@0 524 The
meillo@0 525 .I p
meillo@0 526 command
meillo@0 527 may
meillo@0 528 be placed on the same line after any non-i/o command.
meillo@0 529 .TP
meillo@0 530 .B P
meillo@0 531 This command causes a prompt to be printed
meillo@0 532 before following commands are read.
meillo@2 533 The default prompt is a `*' character.
meillo@0 534 Another
meillo@0 535 .I P
meillo@0 536 disables the prompt.
meillo@0 537 .TP 5
meillo@0 538 .B q
meillo@0 539 The quit command causes
meillo@0 540 .I ed
meillo@0 541 to exit.
meillo@0 542 No automatic write
meillo@0 543 of a file is done.
meillo@0 544 .TP 5
meillo@0 545 .B Q
meillo@0 546 This command is the same as
meillo@0 547 .I q,
meillo@0 548 except that no diagnostic results when no
meillo@0 549 .I w
meillo@0 550 has been given since the last buffer alteration.
meillo@0 551 .TP 5
meillo@0 552 \fR(\fI$\fR)\|\fBr\ \fIfilename\fR
meillo@0 553 The read command
meillo@0 554 reads in the given file after the addressed line.
meillo@0 555 If no file name is given,
meillo@0 556 the remembered file name, if any, is used
meillo@0 557 (see
meillo@0 558 .I e
meillo@0 559 and
meillo@0 560 .I f
meillo@0 561 commands)\|.
meillo@0 562 The file name is remembered if there was no
meillo@0 563 remembered file name already.
meillo@0 564 Address `0' is legal for
meillo@0 565 .I r
meillo@0 566 and causes the
meillo@0 567 file to be read at the beginning of the buffer.
meillo@0 568 If the read is successful, the number of characters
meillo@0 569 read is typed.
meillo@0 570 `\fB.\fR' is left at the last line read in from the file.
meillo@0 571 A `filename' starting with a `\fB!\fR'
meillo@0 572 causes the output of the shell command following this character
meillo@0 573 to be read in.
meillo@0 574 .TP 5
meillo@0 575 \fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/\fR or,
meillo@0 576 .br
meillo@0 577 .ns
meillo@0 578 .TP 5
meillo@0 579 \fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/g\fR or,
meillo@0 580 .br
meillo@0 581 .ns
meillo@0 582 .TP 5
meillo@0 583 \fR(\|\fI.\fB\|,\|\fI.\fR\|)\|\fBs/\fIregular expression\fB/\fIreplacement\fB/\fInumber\fR
meillo@0 584 The substitute command searches each addressed
meillo@0 585 line for an occurrence of the specified regular expression.
meillo@0 586 On each line in which a match is found,
meillo@0 587 all matched strings are replaced by the replacement specified,
meillo@0 588 if the global replacement indicator
meillo@0 589 .RB ` g '
meillo@0 590 appears after the command.
meillo@0 591 If the global indicator does not appear, only the first occurrence
meillo@0 592 of the matched string is replaced;
meillo@0 593 if the \fInumber\fR indicator is given,
meillo@0 594 the numbered occurrence is replaced.
meillo@0 595 It is an error for the substitution to fail on all addressed lines.
meillo@0 596 Any character other than space or new-line
meillo@0 597 may be used instead of `/' to delimit the regular expression
meillo@0 598 and the replacement.
meillo@0 599 `\fB.\fR' is left at the last line substituted.
meillo@0 600 .IP
meillo@0 601 An ampersand
meillo@0 602 .RB ` & '
meillo@0 603 appearing in the replacement
meillo@0 604 is replaced by the string matching the regular expression.
meillo@0 605 The special meaning of `&' in this context may be
meillo@0 606 suppressed by preceding it by
meillo@0 607 .RB ` \e '.
meillo@0 608 The characters `\|\fB\e\fIn\fR'
meillo@0 609 where
meillo@0 610 .I n
meillo@0 611 is a digit,
meillo@0 612 are replaced by the text matched by the
meillo@0 613 .IR n -th
meillo@0 614 regular subexpression
meillo@0 615 enclosed between `\e(' and `\e)'.
meillo@0 616 When
meillo@0 617 nested, parenthesized subexpressions
meillo@0 618 are present,
meillo@0 619 .I n
meillo@0 620 is determined by counting occurrences of `\e(' starting from the left.
meillo@0 621 .IP
meillo@0 622 A substitution string consisting of a single
meillo@0 623 .RB ` % '
meillo@0 624 causes the string given on the previous substitution to be re-used.
meillo@0 625 .IP
meillo@0 626 Lines may be split by substituting new-line characters into them.
meillo@0 627 The new-line in the
meillo@0 628 replacement string
meillo@0 629 must be escaped by preceding it by
meillo@0 630 .RB ` \e '.
meillo@0 631 .TP 5
meillo@0 632 \fR(\|\fI.\|\fB,\|\fI.\|\fR)\|\fBt\|\fIa\fR
meillo@0 633 This command acts just like the
meillo@0 634 .I m
meillo@0 635 command, except that a copy of the addressed lines is placed
meillo@0 636 after address
meillo@0 637 .I a
meillo@0 638 (which may be 0).
meillo@0 639 `\fB.\fR' is left on the last line of the copy.
meillo@0 640 .TP 5
meillo@0 641 .B u
meillo@0 642 The undo command restores
meillo@0 643 the contents of the buffer
meillo@0 644 before the last command was executed.
meillo@0 645 If the undo command is given twice,
meillo@0 646 the current state is restored.
meillo@0 647 .TP 5
meillo@0 648 \fR(\fI1\fB,\fI$\fR)\|\fBv/\fIregular expression\fB/\fIcommand list\fR
meillo@0 649 This command is the same as the global command
meillo@0 650 .I g
meillo@0 651 except that the command list is executed
meillo@0 652 .I g
meillo@0 653 with `\fB.\fR' initially set to every line
meillo@0 654 .I except
meillo@0 655 those
meillo@0 656 matching the regular expression.
meillo@0 657 .TP 5
meillo@0 658 \fR(\fI1\fB,\fI$\fR)\|\fBV/\fIregular expression\fB/\fR
meillo@0 659 This command is the same as the interactive global command
meillo@0 660 .I G
meillo@0 661 except that the commands are read
meillo@0 662 .I g
meillo@0 663 with `\fB.\fR' initially set to every line
meillo@0 664 .I except
meillo@0 665 those
meillo@0 666 matching the regular expression.
meillo@0 667 .TP 5
meillo@0 668 \fR(\fI1\fB,\fI$\fR)\|\fBw\ \fIfilename\fR
meillo@0 669 .br
meillo@0 670 The write command writes the addressed lines onto
meillo@0 671 the given file.
meillo@0 672 If the file does not exist,
meillo@0 673 it is created mode 666 (readable and writable by everyone)\|.
meillo@0 674 The file name is remembered if there was no
meillo@0 675 remembered file name already.
meillo@0 676 If no file name is given,
meillo@0 677 the remembered file name, if any, is used
meillo@0 678 (see
meillo@0 679 .I e
meillo@0 680 and
meillo@0 681 .I f
meillo@0 682 commands)\|.
meillo@0 683 `\fB.\fR' is unchanged.
meillo@0 684 If the command is successful, the number of characters written is
meillo@0 685 printed.
meillo@0 686 A `filename' starting with a `\fB!\fR'
meillo@0 687 causes the string following this character
meillo@0 688 to be executed as a shell command
meillo@0 689 with the addressed lines as standard input.
meillo@0 690 .TP
meillo@0 691 \fR(\fI1\fB,\fI$\fR)\fBW\ \fIfilename\fR
meillo@0 692 This command is the same as
meillo@0 693 .I w,
meillo@0 694 except that the addressed lines are appended to the file.
meillo@0 695 .TP 5
meillo@0 696 \fR(\fI$\fR)\|\fB=\fR
meillo@0 697 The line number of the addressed line is typed.
meillo@0 698 `\fB.\fR' is unchanged by this command.
meillo@0 699 .TP 5
meillo@0 700 \fB!\fR<shell command>
meillo@0 701 The remainder of the line after the `!' is sent
meillo@0 702 to
meillo@0 703 .IR sh (1)
meillo@0 704 to be interpreted as a command.
meillo@0 705 .RB ` . '
meillo@0 706 is unchanged.
meillo@0 707 If the command starts with a
meillo@0 708 .RB ` ! ',
meillo@0 709 the previous command is inserted.
meillo@0 710 A
meillo@0 711 .RB ` % '
meillo@0 712 causes the current file name to be inserted.
meillo@0 713 .TP 5
meillo@0 714 \fR(\|\fI.+1\fR)\|<newline>
meillo@0 715 An address alone on a line causes the addressed line to be printed.
meillo@0 716 A blank line alone is equivalent to `.+1p'; it is useful
meillo@0 717 for stepping through text.
meillo@0 718 .PP
meillo@0 719 The following commands are extensions:
meillo@0 720 .TP 5
meillo@0 721 \fR(\|\fI.\|\fR)\fB\|b\fR[\fIcount\fR]
meillo@0 722 Prints a screenful of lines,
meillo@0 723 starting at the addressed one,
meillo@0 724 and browses forward in the buffer by this amount.
meillo@0 725 With the optional
meillo@0 726 .I count
meillo@0 727 argument, the screen size for this and following
meillo@0 728 .I b
meillo@0 729 commands is set to the given number of lines.
meillo@0 730 .TP 5
meillo@0 731 .B help
meillo@0 732 Causes a summary of
meillo@0 733 .I ed
meillo@0 734 commands along with short descriptions
meillo@0 735 to be printed on the terminal.
meillo@0 736 .TP 5
meillo@0 737 .B N
meillo@0 738 Makes the
meillo@0 739 .I p
meillo@0 740 command behave like the
meillo@0 741 .I n
meillo@0 742 command and vice-versa.
meillo@0 743 If given a second time,
meillo@0 744 the original semantics are restored.
meillo@0 745 .TP 5
meillo@0 746 \fR(\|\fI.\|\fR)\fB\|o\fR[\fIcount\fR]
meillo@0 747 Prints a screenful of lines centered around the addressed one.
meillo@0 748 The current line is not changed.
meillo@0 749 With the optional
meillo@0 750 .I count
meillo@0 751 argument, the amount of lines printed above and below
meillo@0 752 for this and following
meillo@0 753 .I o
meillo@0 754 commands is set to the given number.
meillo@0 755 .TP 5
meillo@0 756 .B z
meillo@0 757 Performs the same actions as a
meillo@0 758 .I w
meillo@0 759 command followed by a
meillo@0 760 .I q
meillo@0 761 command.
meillo@0 762 .PP
meillo@0 763 If an interrupt signal is sent,
meillo@0 764 .I ed
meillo@0 765 prints a `?' and returns to its command level.
meillo@0 766 .PP
meillo@0 767 An input line that consists exactly of the two characters `\e.'
meillo@0 768 causes a period `.' to be inserted with the
meillo@0 769 .IR a ,
meillo@0 770 .IR c ,
meillo@0 771 and
meillo@0 772 .IR i
meillo@0 773 commands.
meillo@0 774 .PP
meillo@0 775 Some size limitations:
meillo@0 776 The maximum number of bytes in the buffer
meillo@0 777 corresponds to the address size;
meillo@0 778 on machines with 32-bit addressing,
meillo@0 779 it is 2\ G bytes,
meillo@0 780 with 64-bit addressing,
meillo@0 781 it is 9\ E bytes.
meillo@0 782 The limit on the number of lines depends on the amount of core:
meillo@0 783 each line takes 2 words.
meillo@0 784 .PP
meillo@0 785 If a line contains a NUL character,
meillo@0 786 regular expressions cannot match beyond this character.
meillo@0 787 A substitute command deletes a NUL
meillo@0 788 and all following characters on the line.
meillo@0 789 NUL characters in command input are discarded.
meillo@0 790 If an input file does not end with a newline,
meillo@0 791 .I ed
meillo@0 792 prints a message and appends one.
meillo@0 793 .PP
meillo@0 794 Omission of the `/' character
meillo@0 795 following the regular expression or the replacement string
meillo@0 796 to the global and substitute commands
meillo@0 797 causes the affected lines to be printed.
meillo@0 798 Thus the following commands have the same effect:
meillo@0 799 .RS
meillo@0 800 g/pattern g/pattern/p
meillo@0 801 .br
meillo@0 802 s/pattern/repl s/pattern/repl/p
meillo@0 803 .br
meillo@0 804 s/pattern/ s/pattern//p
meillo@0 805 .RE
meillo@0 806 .SH "ENVIRONMENT VARIABLES"
meillo@0 807 .TP
meillo@0 808 .BR LANG ", " LC_ALL
meillo@0 809 See
meillo@0 810 .IR locale (7).
meillo@0 811 .TP
meillo@0 812 .B LC_CTYPE
meillo@0 813 Determines the mapping of bytes to characters
meillo@0 814 and the set of printable characters for the
meillo@0 815 .I l
meillo@0 816 command.
meillo@0 817 .TP
meillo@0 818 .B TMPDIR
meillo@0 819 Determines the location of the temporary file
meillo@0 820 if it contains the name of an accessible directory.
meillo@0 821 .SH FILES
meillo@0 822 /var/tmp/e*
meillo@0 823 .br
meillo@0 824 /tmp/e*
meillo@0 825 .br
meillo@0 826 ed.hup: work is saved here if terminal hangs up
meillo@0 827 .SH "SEE ALSO"
meillo@0 828 B. W. Kernighan,
meillo@0 829 .I
meillo@0 830 A Tutorial Introduction to the ED Text Editor
meillo@0 831 .br
meillo@0 832 B. W. Kernighan,
meillo@0 833 .I Advanced editing on UNIX
meillo@0 834 .br
meillo@0 835 bfs(1),
meillo@0 836 grep(1),
meillo@0 837 sed(1),
meillo@0 838 sh(1)
meillo@0 839 .SH DIAGNOSTICS
meillo@0 840 `?name' for inaccessible file;
meillo@0 841 `?' for
meillo@0 842 errors in commands,
meillo@0 843 possibly followed by a verbose description
meillo@0 844 (see the description for the
meillo@0 845 .I h
meillo@0 846 and
meillo@0 847 .I H
meillo@0 848 commands above).
meillo@0 849 .PP
meillo@0 850 To protect against throwing away valuable work,
meillo@0 851 a
meillo@0 852 .I q
meillo@0 853 or
meillo@0 854 .I e
meillo@0 855 command is considered to be in error, unless a
meillo@0 856 .I w
meillo@0 857 has occurred since the last buffer change.
meillo@0 858 A second
meillo@0 859 .I q
meillo@0 860 or
meillo@0 861 .I e
meillo@0 862 will be obeyed regardless.
meillo@0 863 .SH NOTES
meillo@0 864 A
meillo@0 865 .I !\&
meillo@0 866 command cannot be subject to a
meillo@0 867 .I g
meillo@0 868 command.
meillo@0 869 .PP
meillo@0 870 The LC_COLLATE variable has currently no effect.
meillo@0 871 Ranges in bracket expressions are ordered
meillo@0 872 as byte values in single-byte locales
meillo@0 873 and as wide character values in multibyte locales.
meillo@0 874 .PP
meillo@0 875 For portable programs, restrict textual data
meillo@0 876 to the US-ASCII character set and
meillo@0 877 set the LC_CTYPE and LC_COLLATE variables to `C' or `POSIX'.