How to find and replace a string with spaces and / recursively?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to find and replace a string with spaces and / recursively?
# 1  
Old 07-25-2014
How to find and replace a string with spaces and / recursively?

Hi all,

I wanted to find and replace an email id from entire directory structure on a Linux server. I found that
Code:
find . -type f -print0 | xargs -0 sed -i 's/abc@yahoo.com/xyz@gmail.com/g'

would do it perfectly.

But my search criteria has extended and now I want to search for a string1 like "/dir1/dir2/dir3/file1 -- -k abc@yahoo.com" and replace it with string2 which will be like "/dirA/dirB/dirC/fileD -- -j xyz@gmail.com"
And I want to do it recursively on entire directory structure, say under my home directory /home/usr1. So I should be able to search for string1 in all the files in directory and sub directories of /home/usr1 and replace it with string2.

I had tried something foolish which I knew is not going to work:
Code:
find . -type f -print0 | xargs -0 sed -i 's/"/dir1/dir2/dir3/file1 -- -k abc@yahoo.com"/"/dirA/dirB/dirC/fileD -- -j xyz@gmail.com"/g

And as expected it didn't work and shows error as:
Code:
sed: -e expression #1, char 10: unknown option to `s'


Please let me know if there is a way to do this on UNIX/Linux (or even using Perl)

Thanks in advance.

Last edited by pat_pramod; 07-25-2014 at 05:30 PM..
# 2  
Old 07-25-2014
You can see that sed is unable to understand where to look for replacement string as there are many "/" chars.
Good news is you can use any other character as the delimiter if your string contains "/".

Code:
sed -i 's|/dir1/dir2/dir3/file1 -- -k abc@yahoo.com|/dirA/dirB/dirC/fileD -- -j  xyz@gmail.com|g'

Remember you also doesn't have closing single quote in your code.
This User Gave Thanks to clx For This Post:
# 3  
Old 07-25-2014
Thanks a lot clx for your suggestion. It worked perfectly.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How can I use find command to search string/pattern in a file recursively?

Hi, How can I use find command to search string/pattern in a file recursively? What I tried: find . -type f -exec cat {} | grep "make" \; Output: grep: find: ;: No such file or directory missing argument to `-exec' And this: find . -type f -exec cat {} \; -exec grep "make" {} \;... (12 Replies)
Discussion started by: cola
12 Replies

2. UNIX for Dummies Questions & Answers

How do I replace a string in file that is in a certain position with spaces?

I am trying to replace the string in position 26 through 35 of the data file with 10 spaces and I want the remaining file to stay as is, the record length is over 900 characters? I am trying to use the AWK and substr but I am not getting it formatted correctly. Before... (6 Replies)
Discussion started by: fnwine1500
6 Replies

3. Shell Programming and Scripting

String replace that has spaces

cat rf|nawk '/Use SSL= 0/{n+=1}{if (n==3){sub("Use SSL= 0","Use SSL= 0x1",$0)};print }' > rf2Fails. sed 's/Use SSL= 0/Use SSL= 0x1/g' rf > rf2Fails. In addition, the goal is to ONLY replace the 2nd occurence of the... (15 Replies)
Discussion started by: rfransix
15 Replies

4. Shell Programming and Scripting

Help with sed matching <tag1> newline spaces <tag2> and replace the value in the same string format

Hi, I'm very new to shell scripting and have searched google and this forum for quite some time now. I have the following in my xml file: <recipients> <member>value1</member> </recipients> I need to find a string <recipients> that follows with a new-line and bunch of spaces and... (5 Replies)
Discussion started by: mgharios
5 Replies

5. Shell Programming and Scripting

Using sed to replace a string in file with a string in a variable that contains spaces

Hi, i call my shell like: my_shell "my project name" my script: #!/bin/bash -vx projectname=$1 sed s/'PROJECT_NAME ='/'PROJECT_NAME = '$projectname/ <test_config_doxy >temp cp temp test_config_doxy the following error occurres: sed s/'PROJECT_NAME ... (2 Replies)
Discussion started by: vivelafete
2 Replies

6. Shell Programming and Scripting

sed: replace string with another string (with spaces)

Hi I have an XML file with strings XABCD, XEFGHX and XIJKLX. I would like to replace XABCDX with "This is the first string", XEFGHX with "This is the second string" and XIJKLX with "This is the third string". What is the best way to implement this? Should I have a file with the data that is... (4 Replies)
Discussion started by: zmfcat1
4 Replies

7. Shell Programming and Scripting

find and replace a search string recursively in files

Hi , I have a directory structure as dir and subdirectories and files under it and so on.now I need to find the files which contain the search string under every dir and subdir and replace . my search string is like searchstring=/a/b string to be replaced=/a/c/b please help. ... (7 Replies)
Discussion started by: mohanpadamata
7 Replies

8. UNIX for Dummies Questions & Answers

Read a string with leading spaces and find the length of the string

HI In my script, i am reading the input from the user and want to find the length of the string. The input may contain leading spaces. Right now, when leading spaces are there, they are not counted. Kindly help me My script is like below. I am using the ksh. #!/usr/bin/ksh echo... (2 Replies)
Discussion started by: dayamatrix
2 Replies

9. Shell Programming and Scripting

Replace spaces recursively

Hi, I have a directory with files and sub-directories (sub-directory depth might go upto 5). There will be one or more spaces (continuously or anywhere in the file name) which need to be replaced with HYPHENs. How can i replace all SPACE occurances with HYPHEN in file/dir names recursively. (2... (5 Replies)
Discussion started by: prvnrk
5 Replies

10. Shell Programming and Scripting

Replace all occurances of a string in all file-/foldernames, recursively

I need a script that will replace all occurances of a string in all filenames and foldernames, recursively. Right now I have this script: for f in `find -name *eye*`; do echo processing $f g=`expr "xxx$f" : 'xxx\(.*\)' | tr 'eye' 'm'` mv "$f" "$g" done The problem is that tr... (2 Replies)
Discussion started by: TheMJ
2 Replies
Login or Register to Ask a Question