![]() |
|
|
google unix.com
|
|||||||
| Forums | Register | Forum Rules | Links | Albums | FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
| Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here. |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| find and replace string in a directory files | koti_rama | Shell Programming and Scripting | 2 | 05-30-2008 04:48 AM |
| Find and replace a string in multiple files | pharos467 | UNIX for Dummies Questions & Answers | 2 | 11-05-2007 11:47 PM |
| Find and Replace in multiple files (Shell script) | jatins_s | Shell Programming and Scripting | 13 | 11-05-2007 02:11 PM |
| Find and replace files in multiple folders | lodey | Shell Programming and Scripting | 6 | 09-28-2007 03:00 AM |
| find and FTP multiple files in Korn Shell | lambjam | UNIX for Dummies Questions & Answers | 2 | 08-13-2007 11:50 PM |
![]() |
|
|
LinkBack | Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
|
|
||||
|
shell script to find and replace string in multiple files
I used the following script
cd pathname for y in `ls *`; do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y; done and it worked fine for finding and replacing strings with names etc. in all files of the given path. I'm trying to replace a string which consists of path (location of file) say instead of ABCD i have to replace c:/mydocuments/pictures to d:/mypics/personal , as metacharacters wont be searched in unix this script is failing to replace the string which has a path in it. now my script is cd pathname for y in `ls *`; do sed "s/'c:/mydocuments/pictures'/'d:/mypics/personal'/g" $y > temp; mv temp $y; done i tired giving the path in single quotes and double quotes, but i see error sed: command garbled: s/'c:/mydocuments/pictures'/'d:/mypics/personal'/g And all the contents of the files in the path are erased. Also tried the following using sed - sed -e "s!AAA!BBB!g" sed =e "s+AAA+BBB+g" as the string has / in the file location path Is there any other way to work this out. Thanks |
|
||||
|
Single quotes become ordinary characters when inside double-quotes. So you can do this:
echo "that's OK" and this is not an error or open-quote. So putting single-quotes inside a quoted sed-expression is OK, but is does not quote the text between them. The code above by Jean-Pierre looks OK to me. |
|
||||
|
find and replace coding in perl
#!/usr/bin/perl
#bash#./ff.pl --prod \/opt\/ WebSphere5 --cob \/opt\/was6mig\/WebSphere5 -base use File::Find; use Getopt::Long; #$dmPath="/scratch/optcob/cells.dmgr.tmp"; #Modify the Basepath with new copied WAS5 copied location. $basePath="/opt/IBM/WAS6.1/IBMIHS/CI_CNV_CRD_HTTPServer"; $dmPath="/dm5"; # don't worry about this $basePath="/app/WebSphere6/profiles"; $tmpf="/tmp/tmpf"; sub ModFileByRegex { my ($tok, $repl, $fpat, $Path) = (@_); my $cnt = 0; sub fwanted { -f && $File::Find::name =~ /$fpat/ && do { open (INF, $File::Find::name) || die "cannot open $File::Find::name : $!"; open (TMPF, ">$tmpf") || die "cannot open $tmpf for writing: $!"; my @input = <INF>; my $change = grep { s/$tok/$repl/g } @input; if ($change > 0) { close INF; print TMPF @input; close TMPF; print "updating/saving copy of $File::Find::name\n"; rename $File::Find::name, $File::Find::name . ".org"; print `cp -p $tmpf $File::Find::name\n`; $cnt++; } } } print "searching from $Path for $tok in files called $fpat\n"; find (\&fwanted, $Path); return ($cnt); } sub findDirByRegex { my ($tok, $repl, $Path) = (@_); my $cnt = 0; sub wanted { -d && $File::Find::name =~ /$tok[\w\.]*?$/ && push @DIRL, $File::Find::name; } print "Looking for directories from $Path called $tok\n"; find (\&wanted, $Path); while ($_ = pop @DIRL) { $src = $_; s/$tok([\w\.]*)?$/$repl$1/; print "rename $src, $_\n"; rename $src, $_ || warn "could not rename last file, please check"; $cnt++; } return ($cnt); } %optctl = (); GetOptions (\%optctl, "prod=s", "cob=s", "dmgr", "base"); print "options set:\n\n"; print "prod system (source system) :" . $optctl{"prod"} . "\n";; print "cob system (target system) :" . $optctl{"cob"} . "\n"; print "Do Deployment Manager\n" if ($optctl{"dmgr"} == 1); print "Do Base WebSphere\n" if ($optctl{"base"} == 1); print "\n\n"; if ($optctl{"dmgr"} == 1) { print "updating Deployment Manager XML files\n"; $cnt = ModFileByRegex ($optctl{"prod"}, $optctl{"cob"}, ".*", $dmPath); print "$cnt XML files were updated\n"; } if ($optctl{"base"} == 1) { print "updating WebSphere Base XML files\n"; $cnt = ModFileByRegex ($optctl{"prod"}, $optctl{"cob"}, ".*", $basePath); print "$cnt XML files were updated\n"; } if ($optctl{"dmgr"} == 1) { print "updating Deployment Manager base Directory Names\n"; $cnt = findDirByRegex ($optctl{"prod"}, $optctl{"cob"}, $dmPath); print "$cnt directory names updated\n"; } if ($optctl{"base"} == 1) { print "updating WebSphere base Directory Names\n"; $cnt = findDirByRegex ($optctl{"prod"}, $optctl{"cob"}, $basePath); print "$cnt directory names updated\n"; } |
![]() |
| Bookmarks |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|