|
|
1.1 root 1: .\" @(#)e3 6.1 (Berkeley) 5/22/86
2: .\"
3: .SH
4: The current line \- ``Dot'' or ``.''
5: .PP
6: Suppose your buffer still contains the six lines as above,
7: that you have just typed
8: .P1
9: 1,3p
10: .P2
11: and
12: .ul
13: ed
14: has printed the three lines for you.
15: Try typing just
16: .P1
17: p (no line numbers)
18: .P2
19: This will print
20: .P1
21: to come to the aid of their party.
22: .P2
23: which is the third line of the buffer.
24: In fact it is the last
25: (most recent) line that you have done anything with.
26: (You just printed it!)
27: You can
28: repeat this
29: .UL p
30: command without line numbers, and
31: it will continue to print line 3.
32: .PP
33: The reason is that
34: .ul
35: ed
36: maintains a record of the last line
37: that you did anything to (in this case, line 3, which you
38: just printed) so that it can be used instead of an explicit
39: line number.
40: This most recent line is referred to by the
41: shorthand symbol
42: .P1
43: \&\*. (pronounced ``dot'').
44: .P2
45: Dot is a line number in the same way that
46: .UL $
47: is; it means
48: exactly ``the current line'', or loosely,
49: ``the line you most recently did something to.''
50: You
51: can use it in several ways \- one possibility
52: is to say
53: .P1
54: \&\*.,$p
55: .P2
56: This will print all the lines from (including) the current
57: line to the
58: end of the buffer.
59: In our example these are lines 3 through 6.
60: .PP
61: Some commands change the value of dot, while others do not.
62: The
63: .UL p
64: command sets dot to the number of the last line printed;
65: the last command will
66: set both
67: \*.
68: and
69: .UL $
70: to 6.
71: .PP
72: Dot is most useful when used in combinations like this one:
73: .P1
74: \&\*.+1 (or equivalently, \*.+1p)
75: .P2
76: This means ``print the next line'' and is a handy way to step
77: slowly through a buffer.
78: You can also say
79: .P1
80: \&\*.\-1 (or \*.\-1p )
81: .P2
82: which means ``print the line
83: .ul
84: before
85: the current line.''
86: This enables you to go backwards if you wish.
87: Another useful one is something like
88: .P1
89: \&\*.\-3,\*.\-1p
90: .P2
91: which prints the previous three lines.
92: .PP
93: Don't forget that all of these change the value of dot.
94: You can find out what dot is at any time by typing
95: .P1
96: \&\*.=
97: .P2
98: .ul
99: Ed
100: will respond by printing the value of dot.
101: .PP
102: Let's summarize some things about the
103: .UL p
104: command
105: and dot.
106: Essentially
107: .UL p
108: can be preceded by 0, 1, or 2 line numbers.
109: If there is no line number given, it prints the ``current line'',
110: the line that dot refers to.
111: If there is one line number given
112: (with or without the letter
113: .UL p ),
114: it prints that line (and dot is set there); and if there
115: are two line numbers, it prints all the lines in that range
116: (and sets dot to the last line printed.)
117: If two line numbers are specified
118: the first can't be bigger than the second (see Exercise 2.)
119: .PP
120: Typing a single return will cause printing of the next line \-
121: it's
122: equivalent to
123: .UL .+1p .
124: Try it.
125: Try typing
126: a
127: .UL \- ;
128: you will find that
129: it's equivalent to
130: .UL .\-1p .
131: .SH
132: Deleting lines: the ``d'' command
133: .PP
134: Suppose you want to get rid of the three extra lines in the buffer.
135: This is done by the
136: .ul
137: delete
138: command
139: .P1
140: d
141: .P2
142: Except that
143: .UL d
144: deletes lines instead of printing them,
145: its action is similar to that of
146: .UL p .
147: The lines to be deleted are specified for
148: .UL d
149: exactly as they are for
150: .UL p :
151: .P1
152: \fIstarting line, ending line\fP d
153: .P2
154: Thus the command
155: .P1
156: 4,$d
157: .P2
158: deletes lines 4 through the end.
159: There are now three lines left, as you can check by using
160: .P1
161: 1,$p
162: .P2
163: And notice that
164: .UL $
165: now is line 3!
166: Dot
167: is set to the next line after the last line deleted,
168: unless the last line deleted is the last line in the buffer.
169: In that case, dot is set to
170: .UL $ .
171: .SH
172: Exercise 4:
173: .PP
174: Experiment with
175: .UL a ,
176: .UL e ,
177: .UL r ,
178: .UL w ,
179: .UL p
180: and
181: .UL d
182: until you are sure that you
183: know what they do, and until you understand how dot,
184: .UL $ ,
185: and
186: line numbers are used.
187: .PP
188: If you are adventurous, try using line numbers with
189: .UL a ,
190: .UL r
191: and
192: .UL w
193: as well.
194: You will find that
195: .UL a
196: will append lines
197: .ul
198: after
199: the line number that you specify (rather than after dot); that
200: .UL r
201: reads
202: a file in
203: .ul
204: after
205: the line number you specify (not necessarily
206: at the end of the buffer); and that
207: .UL w
208: will write out exactly the lines
209: you specify, not necessarily the whole buffer.
210: These variations are sometimes handy.
211: For instance you can insert a file at the beginning of a buffer
212: by saying
213: .P1
214: 0r filename
215: .P2
216: and you can enter lines at the beginning of the buffer
217: by saying
218: .P1
219: 0a
220: \&. . . \fItext\fP . . .
221: \*.
222: .P2
223: Notice that
224: .UL .w
225: is
226: .ul
227: very
228: different from
229: .P1
230: \*.
231: w
232: .P2
233: .SH
234: Modifying text: the Substitute command ``s''
235: .PP
236: We are now ready to try one of the most important
237: of all commands \- the substitute command
238: .P1
239: s
240: .P2
241: This is the command
242: that is used to change individual
243: words or letters within a line or group of lines.
244: It is what you use, for example, for correcting spelling
245: mistakes and typing errors.
246: .PP
247: Suppose that by a typing error, line 1 says
248: .P1
249: Now is th time
250: .P2
251: \- the
252: .IT e
253: has been left off
254: .IT the .
255: You can use
256: .UL s
257: to fix this up as follows:
258: .P1
259: 1s/th/the/
260: .P2
261: This says: ``in line 1, substitute for the characters
262: .IT th
263: the characters
264: .IT the .''
265: To verify
266: that it works
267: .IT ed "" (
268: will not print
269: the result automatically) say
270: .P1
271: p
272: .P2
273: and get
274: .P1
275: Now is the time
276: .P2
277: which is what you wanted.
278: Notice that dot must have been set to the line
279: where the substitution took place, since the
280: .UL p
281: command
282: printed that line.
283: Dot is always set this way with the
284: .UL s
285: command.
286: .PP
287: The general way to use the substitute command is
288: .P1
289: \fIstarting\(hyline, ending\(hyline\fP s/\fIchange this\fP/\fIto this\fP/
290: .P2
291: Whatever string of characters is between the first pair of
292: slashes is replaced by whatever is between the second pair,
293: in
294: .ul
295: all
296: the lines between
297: .ul
298: starting-line
299: and
300: .ul
301: ending-line.
302: Only the first occurrence on each line is changed, however.
303: If you want to change
304: .ul
305: every
306: occurrence, see Exercise 5.
307: The rules for line numbers are the same as those for
308: .UL p ,
309: except that dot is set to the last line changed.
310: (But there is a trap for the unwary: if no substitution
311: took place, dot is
312: .ul
313: not
314: changed.
315: This causes an error
316: .UL ?
317: as a warning.)
318: .PP
319: Thus you can say
320: .P1
321: 1,$s/speling/spelling/
322: .P2
323: and correct the first spelling mistake
324: on each line
325: in the text.
326: (This is useful for people who are consistent
327: misspellers!)
328: .PP
329: If no line numbers are given, the
330: .UL s
331: command assumes we mean
332: ``make the substitution on line dot'', so it changes things only
333: on the current line.
334: This leads to the very common sequence
335: .P1
336: s/something/something else/p
337: .P2
338: which makes some correction on the
339: current line, and then prints it, to make sure it
340: worked out right.
341: If it didn't,
342: you can try again.
343: (Notice that there is
344: a
345: .UL p
346: on the same line as the
347: .UL s
348: command.
349: With few exceptions,
350: .UL p
351: can follow any command;
352: no other multi-command lines are legal.)
353: .PP
354: It's also legal to say
355: .P1
356: s/ . . . //
357: .P2
358: which means ``change the first
359: string of characters to
360: .IT nothing '', ``
361: i.e.,
362: remove them.
363: This is useful for deleting extra words in a line or removing extra
364: letters from words.
365: For instance, if you had
366: .P1
367: Nowxx is the time
368: .P2
369: you can say
370: .P1
371: s/xx//p
372: .P2
373: to get
374: .P1
375: Now is the time
376: .P2
377: Notice that
378: .UL //
379: (two adjacent slashes) means ``no characters'', not a blank.
380: There
381: .ul
382: is
383: a difference!
384: (See below for another meaning of
385: .UL // .)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.