![]() |
|
|
|
|
|||||||
| Forums | Portal | Register | Forum Rules | FAQ | Contribute | Members List | Arcade | 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 here. |
|
|
||||
| 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 12:48 AM |
| Find and replace a string in multiple files | pharos467 | UNIX for Dummies Questions & Answers | 2 | 11-05-2007 08:47 PM |
| Find and Replace in multiple files (Shell script) | jatins_s | Shell Programming and Scripting | 13 | 11-05-2007 11:11 AM |
| Find and replace files in multiple folders | lodey | Shell Programming and Scripting | 6 | 09-27-2007 11:00 PM |
| find and FTP multiple files in Korn Shell | lambjam | UNIX for Dummies Questions & Answers | 2 | 08-13-2007 07:50 PM |
|
|
Submit Tools | LinkBack | Thread Tools | Search this Thread | Display Modes |
|
#1
|
|||
|
|||
|
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 |
| Forum Sponsor | ||
|
|
|
#2
|
||||
|
||||
|
Try
Code:
cd pathname for y in `ls *`; do sed 's_c:/mydocuments/pictures_d:/mypics/personal_' $y > temp; mv temp $y; done Last edited by aigles; 11-05-2007 at 12:42 PM. Reason: sed command correction |
|
#3
|
|||
|
|||
|
tired
below script sent the error
sed: command garbled: |
|
#4
|
||||
|
||||
|
There was an erroneous / in the sed command.
Previous post modified. Jean-Pierre. |
|
#5
|
|||
|
|||
|
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. |
|
#6
|
|||
|
|||
|
Now it works, one of the _ is missing in my sed command .
Thanks 2 all who responded |
|
#7
|
|||
|
|||
|
same script with different attempt
I tried the following script
cd pathname for y in `ls *`; do sed 's_c:\mydocuments\pictures_d:/mypics/personal_' $y > temp; mv temp $y; done This script is working for all other paths mentioned with forward slash (i.e c:/mydocuments/pictures ). As it has a back slash i need to save it with one more \ i.e \\ but using this is not working, instead getting Error (sed garbled). Any solutions ? |
|||
| Google The UNIX and Linux Forums |