shell script to find and replace string in multiple files


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting shell script to find and replace string in multiple files
# 8  
Old 11-07-2007
Doubling \ works fine :
Code:
$ echo '  c:\mydocuments\pictures ' | sed 's_c:\\mydocuments\\pictures_d:/mypics/personal_'
  d:/mypics/personal 
$

Jean-Pierre.
# 9  
Old 05-16-2008
script overwrites all the files in directory

Quote:
Originally Posted by aigles
Doubling \ works fine :
Code:
$ echo '  c:\mydocuments\pictures ' | sed 's_c:\\mydocuments\\pictures_d:/mypics/personal_'
  d:/mypics/personal 
$

Jean-Pierre.
used the script above modified for my needs:

cd deploy
for y in `ls *.xml`;
do
sed 's_OLD.VALUE_NEW.VALUE_' $y > temp; mv temp $y;
done

works great except one thing: it overwrites all xml files changing their time stamp. is it possible to have the script updating only the ones that have OLD.VALUEs?
# 10  
Old 05-17-2008
Make the mv conditional.

Also lose the silly `ls *`

Code:
cd deploy
for y in *
do
  sed 's_OLD.VALUE_NEW.VALUE_' "$y" >temp
  if cmp temp "$y" >/dev/null
  then
    rm temp
  else
    mv temp "$y"
  fi
done

# 11  
Old 05-20-2008
Thank you era, works like a charm

Quote:
Originally Posted by era
Make the mv conditional.

Also lose the silly `ls *`

Code:
cd deploy
for y in *
do
  sed 's_OLD.VALUE_NEW.VALUE_' "$y" >temp
  if cmp temp "$y" >/dev/null
  then
    rm temp
  else
    mv temp "$y"
  fi
done

# 12  
Old 01-15-2009
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"; }
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Find and replace from multiple files

Hello everybody, I need your help. I have a php site that was expoited, the hacker has injected into many php files a phishing code that was discovered and removed in order to have again a clean code. Now we need to remove from many php files that malware. I need to create a script that find and... (2 Replies)
Discussion started by: ninocap
2 Replies

2. Shell Programming and Scripting

Find and replace in multiple files

Hi, I have php files in main dir and sub dir's as well. I need to find "new mysqli('localhost', 'System', 'xxxxxx', 'System', '3306');" and replace as "new mysqli('localhost', 'unx_sys', 'yyyy', 'unx_sys', '3306');" I tried like: sed 's/new mysqli\(*\)\;$/new... (1 Reply)
Discussion started by: ashokvpp
1 Replies

3. Shell Programming and Scripting

Find multiple strings and replace single string

Hi, following Perl code i used for finding multiple strings and replace with single string. code: #!/usr/bin/perl my @files = <*.txt>; foreach $fileName (@files) { print "$fileName\n"; my $searchStr = ',rdata\)' | ',,rdata\)' | ', ,rdata\)'; my $replaceStr =... (2 Replies)
Discussion started by: chettyravi
2 Replies

4. Shell Programming and Scripting

Shell script to find and replace contents of files in directory

Hi all This is my first post. Please bear with me with all my mistakes. I started learning shell since couple of days now and this might be quite basic for all, i want to search for files in a directory containing specific string and replace it with new string. The code i wrote is quite bulky... (2 Replies)
Discussion started by: theprogrammer
2 Replies

5. Shell Programming and Scripting

Script to find & replace a multiple lines string across multiple php files and subdirectories

Hey guys. I know pratically 0 about Linux, so could anyone please give me instructions on how to accomplish this ? The distro is RedHat 4.1.2 and i need to find and replace a multiple lines string in several php files across subdirectories. So lets say im at root/dir1/dir2/ , when i execute... (12 Replies)
Discussion started by: spfc_dmt
12 Replies

6. UNIX for Dummies Questions & Answers

replace string in multiple files

Hi, I'm new to Unix. My understanding of Unix and its command is very limited. I have about 1000 text files that have a word in it that I need to replace with a different word. e.g. a.txt has 1 line of txt: monday, tuesday, wednesday b.txt has 1 line of txt: monday, tuesday,... (5 Replies)
Discussion started by: millsy5
5 Replies

7. Shell Programming and Scripting

Find & Replace string in multiple files & folders using perl

find . -type f -name "*.sql" -print|xargs perl -i -pe 's/pattern/replaced/g' this is simple logic to find and replace in multiple files & folders Hope this helps. Thanks Zaheer (0 Replies)
Discussion started by: Zaheer.mic
0 Replies

8. Shell Programming and Scripting

Shell Script to replace tokens in multiple files

I have multiple script files that I have created, that allow me to simply replace a few tokens at the top of the file, and then not have to go through the actual script and change anything. I have about 10 of them, but I was hoping to find a way to write a small script that would allow me to input... (20 Replies)
Discussion started by: cbo0485
20 Replies

9. UNIX for Dummies Questions & Answers

Find and replace a 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) ... (2 Replies)
Discussion started by: pharos467
2 Replies

10. Shell Programming and Scripting

Find and Replace in multiple files (Shell script)

hi guys, Suppose you have 100 files in a folder and you want to replace all occurances of a word say "ABCD" in those files with "DCBA", how would you do it ??? jatin (13 Replies)
Discussion started by: jatins_s
13 Replies
Login or Register to Ask a Question