Annotation of 43BSDReno/share/doc/usd/12.edtut/e6, revision 1.1.1.1

1.1       root        1: .\"    @(#)e6  6.1 (Berkeley) 5/22/86
                      2: .\"
                      3: .SH
                      4: Special Characters
                      5: .PP
                      6: You may have noticed that things just don't work right when you used
                      7: some characters like
                      8: \*.,
                      9: .UL * ,
                     10: .UL $ ,
                     11: and others in
                     12: context searches and the substitute command.
                     13: The reason is rather complex, although the cure is simple.
                     14: Basically,
                     15: .ul
                     16: ed
                     17: treats these characters as special, with special meanings.
                     18: For instance,
                     19: .ul
                     20: in a context search or the first string of the substitute command only,
                     21: \*.
                     22: means ``any character,'' not a period, so
                     23: .P1
                     24: /x\*.y/
                     25: .P2
                     26: means ``a line with an
                     27: .UL x ,
                     28: .ul
                     29: any character,
                     30: and a
                     31: .UL y ,''
                     32: .ul
                     33: not
                     34: just ``a line with an
                     35: .UL x ,
                     36: a period, and a
                     37: .UL y .''
                     38: A complete list of the special characters
                     39: that can cause trouble is the following:
                     40: .P1
                     41: ^    \*.    $    [    *    \e
                     42: .P2
                     43: .ul
                     44: Warning:
                     45: The backslash character
                     46: .UL \e
                     47: is special to
                     48: .ul
                     49: ed.
                     50: For safety's sake, 
                     51: avoid it where possible.
                     52: If you have to use one of the special characters
                     53: in a substitute command,
                     54: you can turn off its magic meaning temporarily
                     55: by preceding it with the backslash.
                     56: Thus
                     57: .P1
                     58: s/\e\e\e\*.\e*/backslash dot star/
                     59: .P2
                     60: will change
                     61: .UL \e.*
                     62: into ``backslash dot star''.
                     63: .PP
                     64: Here is a hurried synopsis of the other special characters.
                     65: First, the circumflex
                     66: .UL ^
                     67: signifies
                     68: the beginning of a line.
                     69: Thus
                     70: .P1
                     71: /^string/
                     72: .P2
                     73: finds
                     74: .UL string
                     75: only if it is at the beginning of a line:
                     76: it will find
                     77: .P1
                     78: string
                     79: .P2
                     80: but not
                     81: .P1
                     82: the string...
                     83: .P2
                     84: The dollar-sign
                     85: .UL $
                     86: is just the opposite of the circumflex;
                     87: it means the end of a line:
                     88: .P1
                     89: /string$/
                     90: .P2
                     91: will only find an occurrence of
                     92: .UL string
                     93: that is at the end of some line.
                     94: This implies, of course,
                     95: that
                     96: .P1
                     97: /^string$/
                     98: .P2
                     99: will find only a line that contains just
                    100: .UL string ,
                    101: and
                    102: .P1
                    103: /^\*.$/
                    104: .P2
                    105: finds a line containing exactly one character.
                    106: .PP
                    107: The character
                    108: .UL . ,
                    109: as we mentioned above,
                    110: matches anything;
                    111: .P1
                    112: /x\*.y/
                    113: .P2
                    114: matches any of
                    115: .P1
                    116: x+y
                    117: x-y
                    118: x y
                    119: x\*.y
                    120: .P2
                    121: This is useful in conjunction with
                    122: .UL * ,
                    123: which is a repetition character;
                    124: .UL a*
                    125: is a shorthand for ``any number of
                    126: .UL a 's,''
                    127: so 
                    128: .UL .*
                    129: matches any number of anythings.
                    130: This is used like this:
                    131: .P1
                    132: s/\*.*/stuff/
                    133: .P2
                    134: which changes an entire line,
                    135: or
                    136: .P1
                    137: s/\*.*,//
                    138: .P2
                    139: which deletes all characters in the line up to and
                    140: including the last comma.
                    141: (Since
                    142: .UL .*
                    143: finds the longest possible match,
                    144: this goes up to the last comma.)
                    145: .PP
                    146: .UL [
                    147: is used with
                    148: .UL ]
                    149: to form ``character classes'';
                    150: for example,
                    151: .P1
                    152: /[0123456789]/
                    153: .P2
                    154: matches any single digit \-
                    155: any one of the characters inside the braces
                    156: will cause a match.
                    157: This can be abbreviated to
                    158: .UL [0\-9] .
                    159: .PP
                    160: Finally, the
                    161: .UL &
                    162: is another shorthand character \-
                    163: it is used only on the right-hand part of a substitute command
                    164: where it means ``whatever was matched on the left-hand side''.
                    165: It is used to save typing.
                    166: Suppose the current line contained
                    167: .P1
                    168: Now is the time
                    169: .P2
                    170: and you wanted to put parentheses around it.
                    171: You could just retype the line, but
                    172: this is tedious.
                    173: Or you could say
                    174: .P1
                    175: s/^/(/
                    176: s/$/)/
                    177: .P2
                    178: using your knowledge of
                    179: .UL ^
                    180: and
                    181: .UL $ .
                    182: But the easiest way uses the
                    183: .UL & :
                    184: .P1
                    185: s/\*.*/(&)/
                    186: .P2
                    187: This says ``match the whole line, and replace it
                    188: by itself surrounded by parentheses.''
                    189: The
                    190: .UL &
                    191: can be used several times in a line;
                    192: consider
                    193: using
                    194: .P1
                    195: s/\*.*/&?  &!!/
                    196: .P2
                    197: to produce
                    198: .P1
                    199: Now is the time?  Now is the time!!
                    200: .P2
                    201: .PP
                    202: You don't have to match the whole line, of course:
                    203: if the buffer contains
                    204: .P1
                    205: the end of the world
                    206: .P2
                    207: you could type
                    208: .P1
                    209: /world/s//& is at hand/
                    210: .P2
                    211: to produce
                    212: .P1
                    213: the end of the world is at hand
                    214: .P2
                    215: Observe this expression carefully,
                    216: for it illustrates how to take advantage of
                    217: .ul
                    218: ed
                    219: to save typing.
                    220: The string
                    221: .UL /world/
                    222: found the desired line;
                    223: the shorthand
                    224: .UL //
                    225: found the same
                    226: word in the line;
                    227: and the
                    228: .UL &
                    229: saves you from typing it again.
                    230: .PP
                    231: The
                    232: .UL &
                    233: is a special character only within
                    234: the replacement text of a substitute command,
                    235: and has no special meaning elsewhere.
                    236: You can turn off the special meaning of
                    237: .UL &
                    238: by preceding it with a
                    239: .UL \e :
                    240: .P1
                    241: s/ampersand/\e&/
                    242: .P2
                    243: will convert the word ``ampersand'' into the literal symbol
                    244: .UL &
                    245: in the current line.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.