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.