home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / 1_1_contri / usd / 12_edtut / e4 < prev    next >
Encoding:
Text File  |  1986-05-22  |  5.5 KB  |  270 lines

  1. .\"    @(#)e4    6.1 (Berkeley) 5/22/86
  2. .\"
  3. .SH
  4. Exercise 5:
  5. .PP
  6. Experiment with the substitute command.
  7. See what happens if you
  8. substitute for some word on a line with several occurrences of that word.
  9. For example, do this:
  10. .P1
  11. a
  12. the other side of the coin
  13. \*.
  14. s/the/on the/p
  15. .P2
  16. You will get
  17. .P1
  18. on the other side of the coin
  19. .P2
  20. A substitute command changes only the first occurrence of the first string.
  21. You can change all occurrences by adding a
  22. .UL g
  23. (for ``global'')
  24. to the
  25. .UL s
  26. command, like this:
  27. .P1
  28. s/ . . . / . . . /gp
  29. .P2
  30. Try other characters instead of slashes to delimit the two sets
  31. of characters in the
  32. .UL s
  33. command \- anything should work
  34. except blanks or tabs.
  35. .PP
  36. (If you get funny results using any of the characters
  37. .P1
  38. ^    \*.    $    [    *    \e    &
  39. .P2
  40. read the section on ``Special Characters''.)
  41. .SH
  42. Context searching \- ``/ . . . /''
  43. .PP
  44. With the substitute command mastered, you can move on to
  45. another highly important idea of
  46. .ul
  47. ed
  48. \- context searching.
  49. .PP
  50. Suppose you have the original three line text in the buffer:
  51. .P1
  52. Now is the time
  53. for all good men
  54. to come to the aid of their party.
  55. .P2
  56. Suppose you want to find the line that contains
  57. .IT their
  58. so
  59. you can change it to
  60. .IT the .
  61. Now with only three lines in the buffer, it's pretty easy
  62. to keep track of what line the word
  63. .IT their
  64. is on.
  65. But if the buffer contained several hundred lines,
  66. and you'd been making changes, deleting and rearranging lines,
  67. and so on, you would no longer really know what this line
  68. number would be.
  69. Context searching is simply a method of specifying the desired line,
  70. regardless of what its number is,
  71. by specifying some context on it.
  72. .PP
  73. The way to say ``search for a line
  74. that contains this particular string of characters''
  75. is to type
  76. .P1
  77. /\fIstring of characters we want to find\fP/
  78. .P2
  79. For example,
  80. the
  81. .ul
  82. ed
  83. command
  84. .P1
  85. /their/
  86. .P2
  87. is a context search which
  88. is sufficient to find the desired line \-
  89. it will locate the next occurrence of
  90. the characters between slashes (``their'').
  91. It also sets dot to that line
  92. and prints the line for verification:
  93. .P1
  94. to come to the aid of their party.
  95. .P2
  96. ``Next occurrence'' means that
  97. .ul
  98. ed
  99. starts looking for the string at line
  100. .UL .+1 ,
  101. searches to the end of the buffer,
  102. then continues at line 1 and searches to line dot.
  103. (That is, the search ``wraps around'' from
  104. .UL $
  105. to
  106. 1.)
  107. It scans all the lines in the buffer until it either finds the desired line
  108. or gets back to dot again.
  109. If the given string of characters can't be found in any line,
  110. .ul
  111. ed
  112. types the error message
  113. .P1
  114. ?
  115. .P2
  116. Otherwise it prints the line it found.
  117. .PP
  118. You can do both the search for the desired line
  119. .ul
  120. and
  121. a
  122. substitution all at once, like this:
  123. .P1
  124. /their/s/their/the/p
  125. .P2
  126. which will yield
  127. .P1
  128. to come to the aid of the party.
  129. .P2
  130. There were three parts to that last command:
  131. context search for the desired line, make the substitution, print the line.
  132. .PP
  133. The expression
  134. .UL /their/
  135. is a context search expression.
  136. In their simplest form,
  137. all context search expressions are like this \-
  138. a string of characters surrounded by slashes.
  139. Context searches are interchangeable with line numbers,
  140. so they can be used by themselves to find and print a desired line,
  141. or as line numbers for some other command, like
  142. .UL s .
  143. They were used both ways in the examples above.
  144. .PP
  145. Suppose the buffer contains the three familiar lines
  146. .P1
  147. Now is the time
  148. for all good men
  149. to come to the aid of their party.
  150. .P2
  151. Then the
  152. .ul
  153. ed
  154. line numbers
  155. .P1
  156. /Now/+1
  157. /good/
  158. /party/\-1
  159. .P2
  160. are all context search expressions, and they all refer
  161. to the same line (line 2).
  162. To make a change in line 2,
  163. you could say
  164. .P1
  165. /Now/+1s/good/bad/
  166. .P2
  167. or
  168. .P1
  169. /good/s/good/bad/
  170. .P2
  171. or
  172. .P1
  173. /party/\-1s/good/bad/
  174. .P2
  175. The choice is dictated only by convenience.
  176. You could print all three lines by, for instance
  177. .P1
  178. /Now/,/party/p
  179. .P2
  180. or
  181. .P1
  182. /Now/,/Now/+2p
  183. .P2
  184. or by any number of similar combinations.
  185. The first one of these might be better if you don't
  186. know how many lines are involved.
  187. (Of course, if there were only three lines in the buffer,
  188. you'd use
  189. .P1
  190. 1,$p
  191. .P2
  192. but not if there were several hundred.)
  193. .PP
  194. The basic rule is: a context search expression is
  195. .ul
  196. the same as
  197. a line number, so it can be used wherever a line number is needed.
  198. .SH
  199. Exercise 6:
  200. .PP
  201. Experiment with context searching.
  202. Try a body of text with
  203. several occurrences
  204. of the same string of characters, and scan through it using
  205. the same context search.
  206. .PP
  207. Try using context searches as line numbers for the
  208. substitute, print and delete commands.
  209. (They can also be used
  210. with
  211. .UL r ,
  212. .UL w ,
  213. and
  214. .UL a .)
  215. .PP
  216. Try context searching using
  217. .UL ?text?
  218. instead of
  219. .UL /text/ .
  220. This scans lines in the buffer in reverse order
  221. rather than normal.
  222. This is
  223. sometimes useful if you go too far while looking for some
  224. string of characters \- it's an easy way to back up.
  225. .PP
  226. (If you get funny results with any of the characters
  227. .P1
  228. ^    \*.    $    [    *    \e    &
  229. .P2
  230. read the section on ``Special Characters''.)
  231. .PP
  232. .ul
  233. Ed
  234. provides a shorthand for repeating a context search
  235. for the same string.
  236. For example,
  237. the
  238. .ul
  239. ed
  240. line number
  241. .P1
  242. /string/
  243. .P2
  244. will find the next occurrence of
  245. .UL string .
  246. It often happens that this is not the desired line,
  247. so the search must be repeated.
  248. This can be done by typing merely
  249. .P1
  250. //
  251. .P2
  252. This shorthand stands for ``the most recently used
  253. context search expression.''
  254. It can
  255. also be used as the first string of the substitute
  256. command, as in
  257. .P1
  258. /string1/s//string2/
  259. .P2
  260. which will find the next occurrence of
  261. .UL string1
  262. and replace it by
  263. .UL string2 .
  264. This can save a lot of typing.
  265. Similarly
  266. .P1
  267. ??
  268. .P2
  269. means ``scan backwards for the same expression.''
  270.