[comp.unix.programmer] Summary: Help for upper-casing keywords

rohit@dmdev.UUCP (Rohit Mehrotra) (02/11/91)

> ORIGINAL QUESTION:

>I want to convert a list of keywords (about 150) into upper-case
>                                     ^^^^^^^^^^^
>where ever they occur in a text file, i.e. for ex: wherever say "update"
>or "Update" occurs as a full word change it to "UPDATE".
>			 ^^^^^^^^^^^^^^^^
>Is their a PERL,SED,AWK script out their that would do this for me.

Thanks a lot to all who EMAILed me an answer. The answers basically fall into
thre categories: 

A) Using Sed / Awk script
B) Using tr script.
C) Using a PERL script

A) The ones for sed and awk did not solve my purpose as :

1) Because of the number of keywords the sed scripts were exceeding the the
   sed's limit of total number of command text, number of commands.

2) There was no way do replacements for complete words only, i.e for the above
   example I did not want word "updating" to be capitalized.

B) The ones with the tr scrips were just capitalizing the full text and not
   exclusively the keywords.

C) There were a few PERL scripts EMAILed and well they serve the purpose in its
   completely. I am including the responses of the ones that I found really 
   interesting, however all of them did essentially come up with the same 
   regular expression.

Thanks a lot to all of you guys.

rohit

_____________________________________________________________________________
From: merlyn@iwarp.intel.com

#!/usr/bin/perl -p

$code = <<X;
while (<>) {
X

while (<DATA>) {
        chop;
        $code .= <<"X";
        s/\\b$_\\b/$_/ig;
X
}

$code .= <<X;
	print;
}
X

eval $code;  die $@ if $@;
__END__
UPDATE
SMURF
HAPPY

__________________________________________________________________________
From: me@ebay.sun.com

#! /usr/local/bin/perl
 
%keywords = (
    'fred',     'FRED',
    'jane',     'JANE',
    'george',   'GEORGE',
);

while (<>) {
    for $keyword (keys (%keywords)) {
        s/\b$keyword\b/$keywords{$keyword}/gi;
    }
    print $_;
}
_______________________________________________________________________________
From: tchrist@pixel.convex.com

    #!/usr/bin/perl
    $WORDS = shift 	|| die "usage: $0 wordlist [files ...]\n";
    open WORDS 		|| die "can't open $WORDS $!";
    $code = "while (<>) {\n    study;\n";
    while (<WORDS>) {
	chop;
	s/(\W)/\\$1/g;
	($lhs = $_) =~ tr/A-Z/a-z/;
	($rhs = $_) =~ tr/a-z/A-Z/;
	$code .= "    s/\\b$lhs\\b/$rhs/gi;\n";
    } 
    $code .= "    print;\n}\n";
    #print STDERR $code;
    eval $code;
    die $@ if $@;
_______________________________________________________________________________
-- 
Rohit Mehrotra
Fleet Credit Corporation
8325 NW 53rd St, Miami, Fl 33166.
E-MAIL Address uunet!dmdev!rohit VOICE 1-(305)-477-0390 Ext 469