| 
       
       
             | 
              | 
            
            
            
              
             
             
               
               
               
                  | 
                 
UGU: Unix Guru Universe - Unix Tip #4196- August  7, 2012
 -  Home : Help
 : Today's Tip
 Unix Tip #4196- August  7, 2012
 
EAT YOUR PERL PIE  
  
Mom always sed, "eat your Perl pie"!  
  
A common task is to substitute  
text strings within one or  
more files.  The sed string  
substitution command is often  
used to accomplish this, where  
sed is passed a file name, the  
string substitutions are written  
to another file, and then that  
file is copied over the first  
file to effect the changes  
desired in the original.  
  
This approach has some inherent  
problems.  The command syntax is  
lengthy and cumbersome, a  
secondary file is created  
which involves additional disk  
I/O, and when that file is  
copied or moved back over the  
first one, permissions problems  
and file ownership problems can  
be created.  If your umask  
doesn't match the permissions of  
the original file, then the  
permissions of the final modified  
file will be different than those  
of the original.  Likewise,  
default ownerships and group  
names are imposed on the temporary  
copy, and if one is not careful,  
when the temporary copy is written  
back to the original file, these  
can destroy the original file's  
ownership and group information.  
  
A much better way to accomplish  
text substitution within a file or  
group of files is to use the  
"perl pie" approach, as shown here  
on file foo:  
  
perl -p -i -e 's/original text string/replacement string' foo  
  
The above command will replace the  
first instance of "original text  
string" with "replacement string"  
in file foo.  If you want to  
perform this globally within the  
file, add the /g global specifier  
at the back end, as follows:  
  
perl -p -i -e 's/original text string/replacementstring/g' foo  
  
To act on several files in the  
same directory, change the file  
specification as needed, by  
specifying foo*, *, or whatever  
you need.  
  
Note that perl uses the exact  
same syntax for the actual string  
substitution portion of the command  
as sed does, which makes the command  
syntax easy to remember. However,  
perl performs the entire operation  
on the file without the use of any  
secondary files needing to be  
created, which eliminates the extra  
disk I/O and the potential  
permissions and ownership issues.  
  
  
  
This tip generously supported by: jem@postfive.rose.hp.com  
  
  
 NOTE: All tips provided are USE AT YOUR OWN RISK. Tips are submitted
by various unix admins around the globe. UGU suggest you read and
test each tip in a non-volitile environment before placing into
production.
  
LAST 5 TIPS
 4195
 - CHANGING A PRINT QUEUE IP
 4194
 - MOVING FILES AROUND
 4193
 - GOOD TIME FOR CRON
 4192
 - PATHS EASIER TO READ
 4191
 - KEEP THAT USER OUT!
 
I want to 
 SUBSCRIBE
 and get a UGU Tip everyday. 
I want to 
 UNSUBSCRIBE
 and NOT get a UGU Tip everyday.
 
If you have a UNIX TIP let us know, we just may use it:
(All tips become the property of the Unix Guru Universe)
                 
                  | 
                
                
                | 
                
               
                 |   | 
                
               
                   Copyright 1994-2024 Unix Guru Universe    | 
                
                
                | 
              
              
              | 
              | 
            
            
           
             |