UTILS\CHANGE.DOC ·
DOC ·
4.8 KB ·
1991-06-01 ·
from PCPlus_Issue-57_Jun-1991_FluxEngine-360Kb
CHANGE
======
String substitution filter
Copyright (c) 1991 N.G.Hampton
Usage: CHANGE [options] pattern [newstuff] [<infile] [>outfile]
or CHANGE [options] /f chgfile [<infile] [>outfile]
Options: /w Word search
/i Ignore case.
/f Take substitutions from chgfile
Change copies standard input to standard output except that each non-
overlapping string that matches pattern is replaced by the string newstuff.
If newstuff is ommitted then the matched string is deleted. Patterns are
regular expressions as described below; they are matched on a line by line
basis. Whereever $0 appears in newstuff, the matched pattern is output.
Parts of pattern may be tagged by placing them between braces ({}); the
tagged parts may then be referenced by $n in newstuff where n is the nth
tagged part.
When using the /f option, the pattern an substitutions are taken from the
specified ASCII file. Each substitution should appear on a new line as two
strings enclosed by double quotes (") and separated by spaces. The first
string is the string to match, and the second is the substitution. The
substitutions are applied in the order in which they appear in the file.
Each substitution may be prefixed by /w /i or /wi to set the required
options. Lines starting with a hash (#) character are ignored.
Regular Expressions
===================
The regular expressions used by this program are similar to those used in
many UNIX software tools (e.g. grep).
A regular expression is a concatenation of the following elements:
c literal character c
. Any character except newline
^ Beginning of line
$ End of line (null string before newline)
[...] Character class (any one of these characters)
[^...] Negated character class (all but these characters)
* Zero or more occurrences of previous element
+ One or more occurrences of previous element
? Zero or one occurrence of previous element
\c Escaped character (e.g. \[, \*, \\)
Special meaning of characters in a text pattern is lost when escaped.
A character class consists of zero or more of the following elements,
surrounded by [ and ]:
c Literal character, including [
c1-c2 Range of characters (digits or letters of same case)
^ Negated character class if at beginning
\c Escaped character (e.g. \^, \-, \\, \])
An escape sequence consists of the character \ followed by a single
character, or a string of digits, using C language convention.
\n Newline (carridge return and linefeed)
\t Tab
\xnn ASCII character nn hex
\0nnn ASCII character nnn octal
\nnn ASCII character nnn decimal
\c c (\\ = \)
Regular expression Examples
===========================
[A-Za-z]+ Matches with a string containing one or more
alphabetic characters.
(e.g. 'A', 'ABxdc', 'AASD')
A[0-9]* Matches with a string beggining with the letter
'A' followed by zero or more numeric digits.
(e.g. 'A32344', 'A', 'A99', 'A0')
^$ Matches with a blank line.
\[\[ Matches with '[[' only.
Change Examples
===============
-----------------------------------
Command : CHANGE [A-Za-z]+ XX <CHANGE.DOC
Function : Changes all words from file CHANGE.DOC into the string
'XX' and outputs the result to the screen. (CHANGE.DOC
is not changed).
-----------------------------------
Command : CHANGE "[ \t]+" " " <CHANGE.DOC | CHANGE ^$
Function : Removes all surplus spaces and then blank lines from
CHANGE.DOC and outputs the result on the screen.
-----------------------------------
Command : CHANGE "^{[0-9]+} {.*}" "$2 $1" <FRED >JIM
Function : Takes lines from file FRED beginning with a number and
followed with any string, and puts the number on the
end of the line in file JIM. Non-matching strings are
output unchanged.
-----------------------------------
Command : ECHO 4+2 = 7 - 1 | CHANGE "[0-9]+[ ]*[+-][ ]*[0-9]+" ($0)
Result : (4+2) = (7 - 1)
Function : To parenthesize all sums and differences of numbers in
the input.
-----------------------------------
Command : DIR | CHANGE "[0-9]+-[0-9]+-[0-9]+ +[0-9]+:[0-9]+[pa]"
Function : Removes time and date fields from a directory listing.
-----------------------------------
Command : DIR | CHANGE "^{[A-Z_$]+} +{[A-Z_$]+}{.*}" "$3 $1.$2"
Function : Places the filename at the end of each directory entry.
-----------------------------------
Command : DIR | CHANGE "^.*<DIR>.*$\n"
Function : Perform a directory showing names of files only (no
sub directories.