summaryrefslogtreecommitdiffstats
path: root/doc/tools/word-replace2
blob: b9e8f6c66410fcf939ef52ea154a3c790ecb12db (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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-replace2

   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 ;
}

open (INFILE, "<$infile") ||
        die "could not open input file $infile: $!";
$line = join('',<INFILE>) ;
close INFILE;


print STDERR "$outfile\t";

open (OUTFILE, ">$outfile") ||
        die "could not open output file $outfile: $!";

foreach $key (keys %patterns)
{
  if ( $line =~ s/\b$key\b/$patterns{$key}/ge )
  {
    print STDERR "." ;
  }
}

print OUTFILE $line ;

print STDERR "\n";
close OUTFILE;