82c20c | 2002-04-06 | Johan Sundström | | #! /usr/local/bin/pike
|
89b688 | 2002-04-06 | Johan Sundström | |
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | |
|
89b688 | 2002-04-06 | Johan Sundström | | string version = ("$Revision: 1.5 $"/" ")[1];
|
82c20c | 2002-04-06 | Johan Sundström | | int verbosity = 1;
int overwrite = 1;
void usage(function|void output_fun)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | if(!output_fun)
output_fun = write;
output_fun(#"rsif [options] <from> <to> <files>
rsif (\"replace string in file\") replaces all occurrences of the string
<from> with the string <to> in listed files. The name of the files that
were changed are written to stdout. Available options:
-b, --backups Saves the unaltered file in <filename>~
-v, --verbose Writes more junk to stderr.
-q, --quiet Writes no output at all.
-V, --version Writes the version number of rsif.
-h, --help Shows this help message.\n");
}
int main(int argc, array(string) argv)
{
foreach(Getopt.find_all_options(argv, ({
({ "backup", Getopt.NO_ARG, "-b,--backup"/"," }),
({ "verbose", Getopt.NO_ARG, "-v,--verbose"/"," }),
({ "version", Getopt.NO_ARG, "-V,--version"/"," }),
({ "quiet", Getopt.NO_ARG, "-q,--quiet"/"," }),
({ "help", Getopt.NO_ARG, "-h,--help"/"," }) })), array opt)
switch(opt[0])
{
case "backup": overwrite = 0; break;
case "verbose": verbosity++; break;
case "version": return 0, write(version + "\n");
case "quiet": verbosity = 0; break;
case "help": return 0, usage();
}
argv = Getopt.get_args(argv);
if(4 > (argc = sizeof(argv)))
return 1, usage(werror);
string from = argv[1], to = argv[2], file;
if(argc == 4 && argv[-1] == "-")
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | if(file = Stdio.stdin.read())
{
if(has_value(file, argv[1]))
{
if(verbosity > 1)
werror("Processing stdin.\n");
write(replace(file, argv[1], argv[2]));
} else
write(file);
}
return 0;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|
89b688 | 2002-04-06 | Johan Sundström | | int failures, mode;
|
82c20c | 2002-04-06 | Johan Sundström | | if(verbosity > 1)
werror("Replaced strings in these files:\n");
foreach(argv[3..], string filename)
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | if(file = Stdio.read_file(filename))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | if(has_value(file, argv[1]))
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | if(verbosity > 0)
write("%s\n", filename);
file = replace(file, argv[1], argv[2]);
|
89b688 | 2002-04-06 | Johan Sundström | | mode = file_stat(filename)->mode;
|
82c20c | 2002-04-06 | Johan Sundström | | if(overwrite || mv(filename, filename + "~"))
|
89b688 | 2002-04-06 | Johan Sundström | | failures += !Stdio.write_file(filename, file, mode);
|
82c20c | 2002-04-06 | Johan Sundström | | else
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | {
|
82c20c | 2002-04-06 | Johan Sundström | | werror("Failed to create backup file.\n");
failures++;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
}
}
}
|
82c20c | 2002-04-06 | Johan Sundström | | return failures;
|
5267b7 | 1995-08-09 | Fredrik Hübinette (Hubbe) | | }
|