summaryrefslogtreecommitdiff
path: root/bin/ed/USD.doc/09.edtut/e4
diff options
context:
space:
mode:
Diffstat (limited to 'bin/ed/USD.doc/09.edtut/e4')
-rw-r--r--bin/ed/USD.doc/09.edtut/e4303
1 files changed, 303 insertions, 0 deletions
diff --git a/bin/ed/USD.doc/09.edtut/e4 b/bin/ed/USD.doc/09.edtut/e4
new file mode 100644
index 00000000000..bcfec2ada6f
--- /dev/null
+++ b/bin/ed/USD.doc/09.edtut/e4
@@ -0,0 +1,303 @@
+.\" $OpeBSD$
+.\"
+.\" Copyright (C) Caldera International Inc. 2001-2002.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code and documentation must retain the above
+.\" copyright notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgement:
+.\" This product includes software developed or owned by Caldera
+.\" International, Inc.
+.\" 4. Neither the name of Caldera International, Inc. nor the names of other
+.\" contributors may be used to endorse or promote products derived from
+.\" this software without specific prior written permission.
+.\"
+.\" USE OF THE SOFTWARE PROVIDED FOR UNDER THIS LICENSE BY CALDERA
+.\" INTERNATIONAL, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+.\" IN NO EVENT SHALL CALDERA INTERNATIONAL, INC. BE LIABLE FOR ANY DIRECT,
+.\" INDIRECT INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+.\" IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" @(#)e4 8.1 (Berkeley) 6/8/93
+.\"
+.SH
+Exercise 5:
+.PP
+Experiment with the substitute command.
+See what happens if you
+substitute for some word on a line with several occurrences of that word.
+For example, do this:
+.P1
+a
+the other side of the coin
+\*.
+s/the/on the/p
+.P2
+You will get
+.P1
+on the other side of the coin
+.P2
+A substitute command changes only the first occurrence of the first string.
+You can change all occurrences by adding a
+.UL g
+(for ``global'')
+to the
+.UL s
+command, like this:
+.P1
+s/ . . . / . . . /gp
+.P2
+Try other characters instead of slashes to delimit the two sets
+of characters in the
+.UL s
+command \- anything should work
+except blanks or tabs.
+.PP
+(If you get funny results using any of the characters
+.P1
+^ \*. $ [ * \e &
+.P2
+read the section on ``Special Characters''.)
+.SH
+Context searching \- ``/ . . . /''
+.PP
+With the substitute command mastered, you can move on to
+another highly important idea of
+.ul
+ed
+\- context searching.
+.PP
+Suppose you have the original three line text in the buffer:
+.P1
+Now is the time
+for all good men
+to come to the aid of their party.
+.P2
+Suppose you want to find the line that contains
+.IT their
+so
+you can change it to
+.IT the .
+Now with only three lines in the buffer, it's pretty easy
+to keep track of what line the word
+.IT their
+is on.
+But if the buffer contained several hundred lines,
+and you'd been making changes, deleting and rearranging lines,
+and so on, you would no longer really know what this line
+number would be.
+Context searching is simply a method of specifying the desired line,
+regardless of what its number is,
+by specifying some context on it.
+.PP
+The way to say ``search for a line
+that contains this particular string of characters''
+is to type
+.P1
+/\fIstring of characters we want to find\fP/
+.P2
+For example,
+the
+.ul
+ed
+command
+.P1
+/their/
+.P2
+is a context search which
+is sufficient to find the desired line \-
+it will locate the next occurrence of
+the characters between slashes (``their'').
+It also sets dot to that line
+and prints the line for verification:
+.P1
+to come to the aid of their party.
+.P2
+``Next occurrence'' means that
+.ul
+ed
+starts looking for the string at line
+.UL .+1 ,
+searches to the end of the buffer,
+then continues at line 1 and searches to line dot.
+(That is, the search ``wraps around'' from
+.UL $
+to
+1.)
+It scans all the lines in the buffer until it either finds the desired line
+or gets back to dot again.
+If the given string of characters can't be found in any line,
+.ul
+ed
+types the error message
+.P1
+?
+.P2
+Otherwise it prints the line it found.
+.PP
+You can do both the search for the desired line
+.ul
+and
+a
+substitution all at once, like this:
+.P1
+/their/s/their/the/p
+.P2
+which will yield
+.P1
+to come to the aid of the party.
+.P2
+There were three parts to that last command:
+context search for the desired line, make the substitution, print the line.
+.PP
+The expression
+.UL /their/
+is a context search expression.
+In their simplest form,
+all context search expressions are like this \-
+a string of characters surrounded by slashes.
+Context searches are interchangeable with line numbers,
+so they can be used by themselves to find and print a desired line,
+or as line numbers for some other command, like
+.UL s .
+They were used both ways in the examples above.
+.PP
+Suppose the buffer contains the three familiar lines
+.P1
+Now is the time
+for all good men
+to come to the aid of their party.
+.P2
+Then the
+.ul
+ed
+line numbers
+.P1
+/Now/+1
+/good/
+/party/\-1
+.P2
+are all context search expressions, and they all refer
+to the same line (line 2).
+To make a change in line 2,
+you could say
+.P1
+/Now/+1s/good/bad/
+.P2
+or
+.P1
+/good/s/good/bad/
+.P2
+or
+.P1
+/party/\-1s/good/bad/
+.P2
+The choice is dictated only by convenience.
+You could print all three lines by, for instance
+.P1
+/Now/,/party/p
+.P2
+or
+.P1
+/Now/,/Now/+2p
+.P2
+or by any number of similar combinations.
+The first one of these might be better if you don't
+know how many lines are involved.
+(Of course, if there were only three lines in the buffer,
+you'd use
+.P1
+1,$p
+.P2
+but not if there were several hundred.)
+.PP
+The basic rule is: a context search expression is
+.ul
+the same as
+a line number, so it can be used wherever a line number is needed.
+.SH
+Exercise 6:
+.PP
+Experiment with context searching.
+Try a body of text with
+several occurrences
+of the same string of characters, and scan through it using
+the same context search.
+.PP
+Try using context searches as line numbers for the
+substitute, print and delete commands.
+(They can also be used
+with
+.UL r ,
+.UL w ,
+and
+.UL a .)
+.PP
+Try context searching using
+.UL ?text?
+instead of
+.UL /text/ .
+This scans lines in the buffer in reverse order
+rather than normal.
+This is
+sometimes useful if you go too far while looking for some
+string of characters \- it's an easy way to back up.
+.PP
+(If you get funny results with any of the characters
+.P1
+^ \*. $ [ * \e &
+.P2
+read the section on ``Special Characters''.)
+.PP
+.ul
+Ed
+provides a shorthand for repeating a context search
+for the same string.
+For example,
+the
+.ul
+ed
+line number
+.P1
+/string/
+.P2
+will find the next occurrence of
+.UL string .
+It often happens that this is not the desired line,
+so the search must be repeated.
+This can be done by typing merely
+.P1
+//
+.P2
+This shorthand stands for ``the most recently used
+context search expression.''
+It can
+also be used as the first string of the substitute
+command, as in
+.P1
+/string1/s//string2/
+.P2
+which will find the next occurrence of
+.UL string1
+and replace it by
+.UL string2 .
+This can save a lot of typing.
+Similarly
+.P1
+??
+.P2
+means ``scan backwards for the same expression.''