You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by je...@apache.org on 2002/04/12 13:57:14 UTC
cvs commit: jakarta-avalon-excalibur/tools/bin replace
jefft 02/04/12 04:57:14
Added: tools/bin replace
Log:
Script to replace a block of text with another, in multiple files. Useful for
making changes in multiple build.xml files.
Revision Changes Path
1.1 jakarta-avalon-excalibur/tools/bin/replace
Index: replace
===================================================================
#!/usr/bin/perl -w
#
# Script to replace one multiline string with another in a list of files.
# Typical usage: re "`cat fromfile`" "`cat tofile`" *.xml
# Where fromfile contains the regexp, and tofile contains text to replace
# each regexp match with
#
# Author: Jeff Turner <je...@apache.org>
# Based on code at
# http://www.cclabs.missouri.edu/things/instruction/perl/perlcourse.html
sub usage() {
print "
$0: A script to replace one block of text with another in multiple files
Usage: $0 <from> <to> [file...]
Where <from> is a regex occurring in [file]
<to> is a string which will replace each occurrence of <from>
[file...] a list of files to act on.\n"
}
$original = shift(@ARGV) or &usage and exit;
$replacement = shift(@ARGV) or &usage and exit;
$nchanges = 0;
# The input record separator is defined by Perl global
# variable $/. It can be anything, including multiple
# characters. Normally it is "\n", newline. Here, we
# say there is no record separator, so the whole file
# is read as one long record, newlines included.
undef $/;
foreach $file (@ARGV) {
if (! open(INPUT,"<$file") ) {
print STDERR "Can't open input file $file\n";
next;
}
# Read input file as one long record.
$data=<INPUT>;
close INPUT;
if ($data =~ s/\Q$original/$replacement/gs) {
$bakfile = "$file.bak";
# Abort if can't backup original or output.
if (! rename($file,$bakfile)) {
die "Can't rename $file $!";
}
if (! open(OUTPUT,">$file") ) {
die "Can't open output file $file\n";
}
print OUTPUT $data;
close OUTPUT;
print STDERR "$file changed\n";
$nchanges++;
}
else { print STDERR "$file not changed\n"; }
}
print STDERR "$nchanges files changed.\n";
exit(0);
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>