Warning!
|
The diff
command can
make an editing script (28.9
)
that you give to the
ex
or ed
editors
or the
patch
(33.9
)
program.
They'll apply your same edits to other copies of the same file.
This is handy if you have a lot of copies of a big file,
spread around a network or on a lot of disks, and you want to make the
same small change to all the files.
Instead of sending new copies of the whole file, just have diff
make a script - and use that little script to update all the big files. |
Here's a demo.
I'm going to modify a program called pqs.c
.
Then I'll use diff
and ed
to apply the same changes to
a copy of the file named remote-pqs.c
(which might be at a remote
computer):
>>
|
1% cp pqs.c remote-pqs.c
2% cp pqs.c pqs.c.new
3% vi pqs.c.new
4% diff pqs.c pqs.c.new
106,107c106
< fprintf(stderr,
< "%s: quitting: not able to %s your .pq_profile file.\n",
--
> fprintf(stderr, "%s: quitting: can't %s your .pq_profile file.\n",
390a390
> "WARNING:",
5% diff -e pqs.c pqs.c.new > edscr
6% cat edscr
390a
"WARNING:",
.
106,107c
fprintf(stderr, "%s: quitting: can't %s your .pq_profile file.\n",
.
7% echo w >> edscr
8% ed remote-pqs.c < edscr
19176
19184
9% diff pqs.c.new remote-pqs.c
10%
|
At prompt 1%
, I make the simulated "remote" copy of the pqs.c
file.
At prompt 2%
, I make another copy of it; at prompt 3%
, I edit the copy.
Prompt 4%
has a diff
that shows the changes I made.
Then, at prompt 5%
, I run
diff
-e
(28.1
)
;
I save the result in
edscr
, which I show at prompt 6.
Prompt 7%
is important because diff -e
doesn't add a w
command to the script file.
That tells ed
to write its changes to the file.
I use
echo w
(8.6
)
to add the command.
In prompt 8%
, I give ed
the name of the "remote" file to edit as a
command-line argument and give it the script file on its standard input.
At prompt 9%
, I do a diff
that shows the changes have been made
and the two versions are the same.