Полезная информация

UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 33.5 Running Editing Scripts Within vi Chapter 33
Batch Editing
Next: 33.7 ed/ex Batch Edits: Avoid Errors When No Match
 

33.6 Change Many Files by Editing Just One

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.

- JP


Previous: 33.5 Running Editing Scripts Within vi UNIX Power ToolsNext: 33.7 ed/ex Batch Edits: Avoid Errors When No Match
33.5 Running Editing Scripts Within vi Book Index33.7 ed/ex Batch Edits: Avoid Errors When No Match

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System