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