Summary: Help for upper-casing keywords

Rohit Mehrotra rohit at dmdev.UUCP
Tue Feb 12 02:24:07 AEST 1991


> 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 at 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 at 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 at 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



More information about the Comp.unix.shell mailing list