Annotation of 43BSDReno/share/doc/usd/13.edadv/ae7, revision 1.1.1.1

1.1       root        1: .\"    @(#)ae7 6.1 (Berkeley) 6/5/86
                      2: .\"
                      3: .NH
                      4: SUPPORTING TOOLS
                      5: .PP
                      6: There are several tools and techniques that go along with the
                      7: editor, all of which are relatively easy once you
                      8: know how
                      9: .UL ed
                     10: works,
                     11: because they are all based on the editor.
                     12: In this section we will give some fairly cursory examples
                     13: of these tools,
                     14: more to indicate their existence than to provide
                     15: a complete tutorial.
                     16: More information on each can be found in
                     17: [3].
                     18: .SH
                     19: Grep
                     20: .PP
                     21: Sometimes you want to find all occurrences of some word or pattern in
                     22: a set of files, to edit them
                     23: or perhaps just to verify their presence or absence.
                     24: It may be possible to edit each file separately and look
                     25: for the pattern of interest, but if there are many files
                     26: this can get very tedious,
                     27: and if the files are really big,
                     28: it may be impossible because of limits in 
                     29: .UL ed .
                     30: .PP
                     31: The program
                     32: .UL grep
                     33: was invented to get around these limitations.
                     34: The search patterns that we have described in the paper are often
                     35: called `regular expressions', and
                     36: `grep' stands for
                     37: .P1
                     38: g/re/p
                     39: .P2
                     40: That describes exactly what
                     41: .UL grep
                     42: does _
                     43: it prints every line in a set of files that contains a
                     44: particular pattern.
                     45: Thus
                     46: .P1
                     47: grep  \(fmthing\(fm  file1  file2  file3  ...
                     48: .P2
                     49: finds `thing' wherever it occurs in any of the files
                     50: `file1',
                     51: `file2',
                     52: etc.
                     53: .UL grep
                     54: also indicates the file in which the line was found,
                     55: so you can later edit it if you like.
                     56: .PP
                     57: The pattern represented by `thing' can be any
                     58: pattern you can use in the editor,
                     59: since
                     60: .UL grep
                     61: and
                     62: .UL ed
                     63: use exactly the same mechanism for
                     64: pattern searching.
                     65: It is wisest always to enclose the pattern in the
                     66: single quotes \(fm...\(fm if it contains any non-alphabetic
                     67: characters, since many such characters also mean something
                     68: special to the
                     69: .UX
                     70: command interpreter
                     71: (the `shell').
                     72: If you don't quote them, the command interpreter will
                     73: try to interpret them before
                     74: .UL grep
                     75: gets a chance.
                     76: .PP
                     77: There is also a way to find lines that
                     78: .ul
                     79: don't 
                     80: contain a pattern:
                     81: .P1
                     82: grep  -v  \(fmthing\(fm  file1  file2  ...
                     83: .P2
                     84: finds all lines that
                     85: don't contains `thing'.
                     86: The
                     87: .UL \-v
                     88: must occur in the position shown.
                     89: Given
                     90: .UL grep
                     91: and
                     92: .UL grep\ \-v ,
                     93: it is possible to do things like selecting all lines that
                     94: contain some combination of patterns.
                     95: For example, to get all lines that contain `x' but not `y':
                     96: .P1
                     97: grep  x  file...  |  grep  -v  y
                     98: .P2
                     99: (The notation | is a `pipe',
                    100: which causes the output of the first command to be used as
                    101: input to the second command; see [2].)
                    102: .SH
                    103: Editing Scripts
                    104: .PP
                    105: If a fairly complicated set of editing operations 
                    106: is to be done on a whole set of files,
                    107: the easiest thing to do is to make up a `script',
                    108: i.e., a file that contains the operations you want to perform,
                    109: then apply this script to each file in turn.
                    110: .PP
                    111: For example, suppose you want to change every
                    112: `Unix' to `UNIX' and every `Gcos' to `GCOS' in a large number of files.
                    113: Then put into the file `script' the lines
                    114: .P1
                    115: g/Unix/s//UNIX/g
                    116: g/Gcos/s//GCOS/g
                    117: w
                    118: q
                    119: .P2
                    120: Now you can say
                    121: .P1
                    122: ed file1 <script
                    123: ed file2 <script
                    124: \&...
                    125: .P2
                    126: This causes
                    127: .UL ed
                    128: to take its commands from the prepared script.
                    129: Notice that the whole job has to be planned in advance.
                    130: .PP
                    131: And of course by using the
                    132: .UX
                    133: command interpreter, you can
                    134: cycle through a set of files
                    135: automatically, with varying degrees of ease.
                    136: .SH
                    137: Sed
                    138: .PP
                    139: .UL sed
                    140: (`stream editor')
                    141: is a version of the editor with restricted capabilities
                    142: but which is capable of processing unlimited amounts of input.
                    143: Basically
                    144: .UL sed
                    145: copies its input to its output, applying one or more
                    146: editing commands to each line of input.
                    147: .PP
                    148: As an example, suppose that we want to do the `Unix' to `UNIX'
                    149: part of the
                    150: example given above,
                    151: but without rewriting the files.
                    152: Then the command
                    153: .P1
                    154: sed  \(fms/Unix/UNIX/g\(fm  file1  file2  ...
                    155: .P2
                    156: applies the command
                    157: `s/Unix/UNIX/g'
                    158: to all lines from `file1', `file2', etc.,
                    159: and copies all lines to the output.
                    160: The advantage of using
                    161: .UL sed
                    162: in such a case is that it can be used
                    163: with input too large for
                    164: .UL ed
                    165: to handle.
                    166: All the output can be collected in one place,
                    167: either in a file or perhaps piped into another program.
                    168: .PP
                    169: If the editing transformation is so complicated
                    170: that
                    171: more than one editing command is needed,
                    172: commands can be supplied from a file,
                    173: or on the command line,
                    174: with a slightly more complex syntax.
                    175: To take commands from a file, for example,
                    176: .P1
                    177: sed  -f  cmdfile  input-files...
                    178: .P2
                    179: .PP
                    180: .UL sed
                    181: has further capabilities, including conditional testing
                    182: and branching, which we cannot go into here, but which are
                    183: described in detail in 
                    184: .ul
                    185: Sed \- A Non-interactive Text Editor.
                    186: 

unix.superglobalmegacorp.com

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