On Sat, Jan 09, 2010, Rudi Ahlers wrote:>I am used to using the replace command to quickly replace strings in
>file, but it's not available on some of my fresh CentOS 5.4 servers.
>
>"yum info replace", "yum whatprovides replace", and
"yum search
>replace" doesn't show me which package(s) to install to get it. So,
>does anyone know which package to install to get the "replace"
>command?
>
>Google doesn't help either since the work "replace" is too
common
The original replace command that I used for years was from the
Kernighan and Pike ``Unix Programming Environment'', and is a
simple shcll script that uses their ``overwrite'' command to
safely edit a file in place. The command syntax is:
replace old new file [file ...]
MySQL created their own replace command that has different
arguments and calling sequence (not having read K&P obviously
which is one of the must-have *nix books :-). I still use the
original K&P version, renamed ``csreplace'' to avoid conflicts
with the mysql version. I've attached the csreplace and
overwrite scripts which can be put someplace in PATH.
A *MUCH* more flexible tool that can be used for editing in place
is Ralf Engelschall's shtool script available here:
ftp://ftp.gnu.org/gnu/shtool/
GNU shtool is a compilation of small but very stable and
portable shell scripts into a single shell tool. All
ingredients were in successful use over many years in various
free software projects. The compiled shtool script is intended
to be used inside the source tree of those free software
packages. There it can take over various (usually non-portable)
tasks related to the building and installation of such
packages.
The only problem I've found with shtool's subst option is that
giving it a bad ``sed'' command results in zero length file(s) so
it's a good idea to test complex substitutions.
Bill
--
INTERNET: bill at celestial.com Bill Campbell; Celestial Software LLC
URL: http://www.celestial.com/ PO Box 820; 6641 E. Mercer Way
Voice: (206) 236-1676 Mercer Island, WA 98040-0820
Fax: (206) 232-9186 Skype: jwccsllc (206) 855-5792
Just because you do not take an interest in politics doesn't mean politics
won't take an interest in you. -- Pericles
-------------- next part --------------
: replace: replace str1 in files with str2, in place
# PATH=:/bin:/usr/bin:/csrel25/bin
# . /csrel25/etc/csspath # sets path for local system
case $# in
0|1|2) echo 'Usage: replace str1 str2 files' 1>&2; exit 1
esac
left="$1"; right="$2"; shift; shift
for i
do
if [ -s $i ]
then
overwrite $i sed "s@$left@$right at g" $i
fi
done
-------------- next part --------------
: overwrite: copy standard input to output after EOF
: final version
opath=$PATH
case $# in
0|1) echo 'Usage: overwrite file cmd [args]' 1>&2; exit 2
esac
file=$1; shift
new=/tmp/overwr1.$$; old=/tmp/overwr2.$$
: clean up on interrupt
trap 'rm -f $new $old; exit 1' 1 2 15
: collect input
if PATH=$opath "$@" >$new
then
cp $file $old
trap '' 1 2 15
cp $new $file
else
echo "overwrite: $1 failed, $file unchanged" 1>&2
exit 1
fi
rm -f $new $old