Pattern Replacement


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Pattern Replacement
# 1  
Old 04-24-2008
Pattern Replacement

There is a requirement that i need to replaced a pattern by another pattern in all the files in my entire file system. there are 1000s of file in the system. let the pattern is "calcuta". i have to replace this pattern by "kolkata" in all those files which contain "calcuta".

I am only able to find out all those list file in the entire file system which contain the pattern using the command.

Code:
find / -type f | xargs grep -il "calcuta"

and usind vi i can do the job. but it is very lengthy process. everytime i have open file to replace the pattern.

can anybody please help me how i can easily do the job? is it possible to do it in sinle command line. is there any extension that i tried to do the rest?

Last edited by Yogesh Sawant; 04-24-2008 at 04:28 AM.. Reason: added code tags
# 2  
Old 04-24-2008
If your sed supports the -i option, it can do the replacement in-place. Otherwise you will need a small script which writes to a temporary file and then replaces the original file with that.

Code:
find / -type f | xargs sed -i 's/calcuta/kolkata/g'

The sed manual page is probably not a good place to start learning, but any decent Unix tutorial or book will have a section about sed.
# 3  
Old 04-25-2008
Or try this:

Code:
find . -type f  | while read files
  do
     echo "$(awk '{gsub(/calcuta/,"kolkata")}1' "$files")" > "$files"
  done

Tested on a number of files about 1Mb in size.
# 4  
Old 04-25-2008
What's the echo for? Why not just

Code:
awk '{ gsub(/calculta/, "kolkata) }1' "$files" >"$files"

... within the same while loop?

In particular, echo on some systems does a fair amount of backslash parsing etc, which will cause undesired changes in the output.
# 5  
Old 04-25-2008
Because going that way :

Code:
awk ...       "$files" > "$files"

the files will get completely emptied out. Just test it and see it for yourself.

While the command was written quickly, I agree it's not the best solution. Anyway, with proper quoting on the files that I tested, I got the results that I expected.
# 6  
Old 04-25-2008
Ah yes, of course. You could also simply use a temporary file, or wiggle with redirection.
# 7  
Old 04-25-2008
Code:
find / -type f | while read files
 do
  awk -v a="$files" '{ gsub(/calcuta/,"kolkata") ; print > a".tmp" }' "$files"
  mv "$files".tmp "$files" 
 done

or

Code:
find / -type f | xargs -i awk -v a='{}' '{ gsub(/calcuta/,"kolkata"); print > a".tmp" } END{print "mv", a".tmp", a }' '{}' | sh

Tested on Ubuntu and BSD.

Last edited by rubin; 05-17-2008 at 03:19 AM.. Reason: Modified previous codes. They worked on small files, but not in big ones.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

GUI for multiple pattern replacement

I'm trying to change a few programs in our environment. Basically We have hardcoded some server names and stuff, So I want some one to suggest me some UNIX gui tools that can be used to replace these.. I really don't want to deal doing this through the command line. I want to transfer the files... (3 Replies)
Discussion started by: sudden
3 Replies

2. Shell Programming and Scripting

Help with Pattern Matching and replacement in Gz files

Hi Techies, I need a help in finding junk characters and remove them from a Datafile. we have a file and it had crores of records like below SGSN_MCC_MNC=01150 but sometime due to the issue with sending server we are getting some junk characters in the middle of data like below ... (6 Replies)
Discussion started by: mahi_mayu069
6 Replies

3. Shell Programming and Scripting

Pattern Matching and replacement

Hello Everybody, I need a help in the below pattern matching and replacement issue I have a file : emp.txt 21356 suresh 12/12/2012 23511 ramesh 11/06/2011 31456 biswajit 09/08/2013 53134 archan 06/02/2009 first field:- employee id, 2nd field is name and third field is date of joining ... (10 Replies)
Discussion started by: shellscripting
10 Replies

4. Shell Programming and Scripting

Unix file pattern check and replacement

HI Guys , Using UNIX ,I intend to check with correct file pattern Access_file_Record.YYYYMM in path /tmp If the file exist in correct format come out from code . If not found check with different file patterns for same month period YYYYMM ( Like Access_file_Record_YYYYMM.txt or... (8 Replies)
Discussion started by: Perlbaby
8 Replies

5. Shell Programming and Scripting

sed noob needs help with replacement pattern.

Hi there, i am absolutely new in shell programming and especially using sed. What i want to do is to replace every emailaddress suffix with another. In my Testfile there is: foo@bar.comMy attempt to replace every @<something>.<someotherthing> is: sed 's/@+\.+/REPLACE/g' test.txt... (5 Replies)
Discussion started by: Donngal
5 Replies

6. Shell Programming and Scripting

Sed for selective pattern replacement

Hi I am having a code snippet grant permission to all user sts|ln|uSe|PSG sajncht|se|Use|PPSPSG psg|ln|use|TSPSG sts_user.Me revoke I need to change all occurance of use (uSe,Use,use) with USE. I am using the following sed command for this sed 's//USE/g' s_sample.txt Output: (7 Replies)
Discussion started by: sudeep.id
7 Replies

7. Shell Programming and Scripting

String replacement when particular pattern matches in a file

I have a file file123.xml which looks like this xmlEntry="username"="josh" <property="never_back_down"> phone="<178652>" apn=property:address="wonderland" xmlEntry="username"="jessica" <property="never_back_down"> phone="<178653>" apn=property:address="wonderland"... (5 Replies)
Discussion started by: poga
5 Replies

8. Shell Programming and Scripting

Date Pattern Match (replacement string)

Hello, i am splitting files and sometimes the string of the pattern doesnt exist in the input file it starts for example with 00:00:01. So the output is completely desorganized, is there any way of putting a replacement string in the pattern so it will grab all the times from 00:**:** to first... (0 Replies)
Discussion started by: x-plicit78
0 Replies

9. UNIX for Dummies Questions & Answers

awk pattern replacement

Hi I'm a newbie in unix and I'm having trouble in creating a script. I want to search for a pattern '_good' and insert new lines that contains '_bad', '_med', '_fail' while also ensure that the line contains _good is removed here some of the data UPDATE SCHOOL SET GRADE =... (1 Reply)
Discussion started by: sexyTrojan
1 Replies

10. Linux

matching pattern and replacement

Hi I am trying to look for a view name in create view statement and then replace this view name with VW_ in grants line in my ddl file . cat dim_provider.sql | grep -i "create view" | while read f1 f2 f3 f4 f5 f6 f7 f8 f9 do new_vw=` echo "$f3" | cut -d "." -f2... (32 Replies)
Discussion started by: capri_drm
32 Replies
Login or Register to Ask a Question