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!
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 \ .
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.
/
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'
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With