UGU Unix Guru Universe
For Unix Admins, By Unix Admins
Follow ugucom on Twitter      Search  in 
Home
BEGINNERS & USERS

Events

Internet
 
 Linux
BEGINNERS & USERS
Software
Linux Vendors
Usenet NewsGroups
Books & Publications
 
 Shop
Cool Admin Gifts!
Gadgets
T-Shirts
Books
 
 Unix Guru Universe
About
Add Link
Feedback
 
 
UGU: Unix Guru Universe - Unix Tip #4624- November 8, 2023 - Home : Help : Today's Tip
Unix Tip #4624- November 8, 2023

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
4623 - CHANGING A PRINT QUEUE IP
4622 - MOVING FILES AROUND
4621 - GOOD TIME FOR CRON
4620 - PATHS EASIER TO READ
4619 - 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)
Email Address:

Yes, email me a Hot Unix Tip everday.

Enter Hot Unix Tip (optional):

Yes, I will support this tip

Captcha (not case sensitive):


Please enter the above letters:

 
Copyright 1994-2024 Unix Guru Universe