Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use SED to find and replace URL strings with the "/" character in the targeted strings? [duplicate]

Tags:

bash

escaping

sed

I'm attempting to use SED through OS X Terminal to perform a find and replace.

Imagine I have this string littered throughout the text file: http://www.find.com/page

And I want to replace it with this string: http://www.replace.com/page

I'm having trouble because I'm not sure how to properly escape or use the "/" character in my strings. For example if I simply wanted to find "cat" and replace with "dog" I've found the following command that works perfectly:

sed -i '' 's/cat/dog/g' file.txt

Does anyone have any ideas on how to achieve the same functionality only instead of cat and dog have strings or URLs that container the "/" character? I tried many different ways of escaping the "/" characters but then it seems as if SED can no longer "find" the string and it doesn't perform any find & replace actions.

Any help or tips are greatly appreciated.

Thanks!

like image 206
LearnWebCode Avatar asked May 27 '13 18:05

LearnWebCode


People also ask

How do you replace special characters in sed?

You need to escape the special characters with a backslash \ in front of the special character. For your case, escape every special character with backslash \ .

How can I replace text after a specific word using sed?

The following `sed` command shows the use of 'c' to replace everything after the match. Here, 'c' indicates the change. The command will search the word 'present' in the file and replace everything of the line with the text, 'This line is replaced' if the word exists in any line of the file.


2 Answers

/ is not the delimiter in sed commands, it's just one of the possible ones. For this example, you can for example use , instead since it does not conflict with your strings;

echo 'I think http://www.find.com/page is my favorite' | 
    sed 's,http://www.find.com/page,http://www.replace.com/page,g'
like image 84
Joachim Isaksson Avatar answered Nov 03 '22 12:11

Joachim Isaksson


sed can take whatever follows the "s" as the separator. Since you are working with URL it is a good practice to use a different delimiter other than / to not confuse sed when your substitution ends and replacement begins.

However, having said that you can definitely use / if you wish too. You just need to escape the literal /.

So, you can either do:

sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file

or use a different delimiter to avoid making your cryptic sed more cryptic.

sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file
like image 37
jaypal singh Avatar answered Nov 03 '22 11:11

jaypal singh