#!/usr/bin/perl
|
#!/usr/bin/perl
|
#
|
#
|
# word-replace2,v 1.4 2002/01/17 21:47:47 joel Exp
|
# word-replace2,v 1.4 2002/01/17 21:47:47 joel Exp
|
#
|
#
|
|
|
eval "exec /usr/local/bin/perl -S $0 $*"
|
eval "exec /usr/local/bin/perl -S $0 $*"
|
if $running_under_some_shell;
|
if $running_under_some_shell;
|
|
|
require 'getopts.pl';
|
require 'getopts.pl';
|
&Getopts("p:vh"); # help, pattern file, verbose,
|
&Getopts("p:vh"); # help, pattern file, verbose,
|
|
|
if ($opt_h || ! $opt_p) {
|
if ($opt_h || ! $opt_p) {
|
print STDERR <
|
print STDERR <
|
word-replace2
|
word-replace2
|
|
|
Replace *words* with patterns. Pattern file specifies which patterns
|
Replace *words* with patterns. Pattern file specifies which patterns
|
to replace on each line. All patterns are wrapped with perl \\b regexp
|
to replace on each line. All patterns are wrapped with perl \\b regexp
|
specifiers.
|
specifiers.
|
|
|
Usage: $0 [-v] -p pattern-file files to replace
|
Usage: $0 [-v] -p pattern-file files to replace
|
|
|
-v -- possibly more verbose
|
-v -- possibly more verbose
|
-p file -- pattern file
|
-p file -- pattern file
|
-h -- help
|
-h -- help
|
|
|
anything else == this help message
|
anything else == this help message
|
|
|
Pattern file looks like this:
|
Pattern file looks like this:
|
|
|
# Example:
|
# Example:
|
# ignores all lines with beginning with # or not exactly 2 fields
|
# ignores all lines with beginning with # or not exactly 2 fields
|
_Dorky_Name rtems_dorky_name # comments, and blank lines are cool
|
_Dorky_Name rtems_dorky_name # comments, and blank lines are cool
|
_Dorky_Name2 rtems_dorky_name2 # comments, and blank lines are cool
|
_Dorky_Name2 rtems_dorky_name2 # comments, and blank lines are cool
|
NO_MORE_HELP
|
NO_MORE_HELP
|
exit 0;
|
exit 0;
|
}
|
}
|
|
|
$verbose = $opt_v;
|
$verbose = $opt_v;
|
$pattern_file = $opt_p;
|
$pattern_file = $opt_p;
|
|
|
# make standard outputs unbuffered (so the '.'s come out ok)
|
# make standard outputs unbuffered (so the '.'s come out ok)
|
$oldfh = select(STDERR); $| = 1; select($oldfh);
|
$oldfh = select(STDERR); $| = 1; select($oldfh);
|
$oldfh = select(STDOUT); $| = 1; select($oldfh);
|
$oldfh = select(STDOUT); $| = 1; select($oldfh);
|
|
|
# pull in the patterns
|
# pull in the patterns
|
open(PATTERNS, "<$pattern_file") ||
|
open(PATTERNS, "<$pattern_file") ||
|
die "could not open $pattern_file: $!, crapped out at";
|
die "could not open $pattern_file: $!, crapped out at";
|
|
|
|
|
|
|
foreach ()
|
foreach ()
|
{
|
{
|
chop;
|
chop;
|
s/#.*//;
|
s/#.*//;
|
next if /^$/;
|
next if /^$/;
|
($orig, $new, $junk, @rest) = split;
|
($orig, $new, $junk, @rest) = split;
|
next if ( ! $orig || ! $new || $junk); # <2 or >2 patterns
|
next if ( ! $orig || ! $new || $junk); # <2 or >2 patterns
|
die "pattern appears 2x: '$orig' in '$pattern_file'--" if defined($patterns{$orig});
|
die "pattern appears 2x: '$orig' in '$pattern_file'--" if defined($patterns{$orig});
|
$patterns{$orig} = $new;
|
$patterns{$orig} = $new;
|
}
|
}
|
close PATTERNS;
|
close PATTERNS;
|
# walk thru each line in each file
|
# walk thru each line in each file
|
|
|
$infile = '-' ;
|
$infile = '-' ;
|
$outfile = '-' ;
|
$outfile = '-' ;
|
|
|
if ( $#ARGV > -1 )
|
if ( $#ARGV > -1 )
|
{
|
{
|
$infile = "@ARGV[0]" ;
|
$infile = "@ARGV[0]" ;
|
shift @ARGV ;
|
shift @ARGV ;
|
}
|
}
|
|
|
if ( $#ARGV > -1 )
|
if ( $#ARGV > -1 )
|
{
|
{
|
$outfile = "@ARGV[0]" ;
|
$outfile = "@ARGV[0]" ;
|
shift @ARGV ;
|
shift @ARGV ;
|
}
|
}
|
|
|
open (INFILE, "<$infile") ||
|
open (INFILE, "<$infile") ||
|
die "could not open input file $infile: $!";
|
die "could not open input file $infile: $!";
|
$line = join('',) ;
|
$line = join('',) ;
|
close INFILE;
|
close INFILE;
|
|
|
|
|
print STDERR "$outfile\t";
|
print STDERR "$outfile\t";
|
|
|
open (OUTFILE, ">$outfile") ||
|
open (OUTFILE, ">$outfile") ||
|
die "could not open output file $outfile: $!";
|
die "could not open output file $outfile: $!";
|
|
|
foreach $key (keys %patterns)
|
foreach $key (keys %patterns)
|
{
|
{
|
if ( $line =~ s/\b$key\b/$patterns{$key}/ge )
|
if ( $line =~ s/\b$key\b/$patterns{$key}/ge )
|
{
|
{
|
print STDERR "." ;
|
print STDERR "." ;
|
}
|
}
|
}
|
}
|
|
|
print OUTFILE $line ;
|
print OUTFILE $line ;
|
|
|
print STDERR "\n";
|
print STDERR "\n";
|
close OUTFILE;
|
close OUTFILE;
|
|
|