Visit Our UNIX and Linux User Community


Find and Replace in multiple files (Shell script)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Find and Replace in multiple files (Shell script)
# 8  
Old 08-28-2002
MySQL

hey

thanks all of u ur replies were really helpful for me.
thanks to peter whose reply was the one really helped but everyones replies where helpful if anyone has anything similar to this can jump in with a solution in regards to this.


thanks & rgds
jatin Smilie
# 9  
Old 08-28-2002
Quote:
Originally posted by peter.herlihy
This is a bit simplier.

for y in `ls *`;
do sed "s/ABCD/DCBA/g" $y > temp; mv temp $y;
done
the command ls * may fail in case of very large number
of files (several thousands).. in those cases the shell expands * into so many filename tokens that, ls may not be able to take in... see ls manual for largest number of filename arguments it can take...

this is the same case with any program which takes file names for its arguments (ls or otherwise)...

though for most cases what Peter says suffices Smilie
# 10  
Old 08-28-2002
Perderabo had said in an earlier thread that that problem can be avoided by dropping the asterisk (*).

So you could use this in Peter's script:
for y in `ls`;
# 11  
Old 08-28-2002
Quote:
Originally posted by oombera
Perderabo had said in an earlier thread that that problem can be avoided by dropping the asterisk (*).

So you could use this in Peter's script:
for y in `ls`;
No I didn't. The backticks ask the shell to run the command inside and then place the output in the command line. When you have too many files to fit in a command line, you need to do this:

ls | while read filename ; do

Here the output from the "ls" comannd get fed into the while loop line by line.
# 12  
Old 08-28-2002
Oops - didn't mean to stick words in your mouth. Smilie

I was referring to this post.

I assumed that meant "ls" could always be substituted for "ls *" and everything would be fine. So actually this would work in Peter's script:

ls | while read y; do
sed "s/ABCD/DCBA/g" $y > temp; mv temp $y;
done
# 13  
Old 11-05-2007
Question same job but differenet issue

I used the same script

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 in all files of the given path.

I'm trying to replace a sting which consists of path

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 sting which has a path in it.


i tired giving the path in single quotes and double quotes, but i see error

sed : garbled and all the contents of the files are erased
Smilie.

Is there any other way to work this out.

Thanks
# 14  
Old 11-05-2007
When using "sed" for replacements, like this:

Code:
sed -e 's/AAA/BBB/g'

the separator (slash "/" in this case) can be any character. Since you have slashes in your replacement text, you should use some other character, preferably one that will not be used in the search or replacement text.

Code:
# These are all equivalent:
sed -e 's/AAA/BBB/g'
sed -e 's!AAA!BBB!g'
sed -e 's+AAA+BBB+g'


Previous Thread | Next Thread
Test Your Knowledge in Computers #39
Difficulty: Easy
IC chips for computer systems are usually made of silicone.
True or False?

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

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

4. 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

5. UNIX for Advanced & Expert Users

linux find and replace in multiple files

Is there a reason why all of these examples of linux find and replace in multiple files use find and grep to pipe into sed or perl. Why not just use sed or perl directly with something like this? sed -i 's/echo/burnbaby/g' booboo*... (2 Replies)
Discussion started by: cokedude
2 Replies

6. UNIX for Dummies Questions & Answers

how to find and replace strings in multiple files

Hi All, Iam new to unix, I need to find string and replace it in the file name. Like text_123_0.txt,text_123_1.txt,text_123_2.txt. I need to search 123 and replace it with 234 . Is there any unix command to replace them in single command since i have 5 directories. So i need to go each and every... (0 Replies)
Discussion started by: etldeveloper
0 Replies

7. Shell Programming and Scripting

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) ... (11 Replies)
Discussion started by: pharos467
11 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 files in multiple folders

Hi there, I would like to write a script to automate the copy and renaming of files in multiple dir. I have a generic file named s253e.prb and would like to copy this to multiple dir and rename it. Example: Dir is AL-M1 and the prb file name is AL-M1.prb. I would like to be able to... (6 Replies)
Discussion started by: lodey
6 Replies

Featured Tech Videos