I came across following snippets which talks about different ways to escape slashes:
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's/\/usr\/local\/bin/\/common\/bin/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's_/usr/local/bin_/common/bin_'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's:/usr/local/bin:/common/bin:'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's|/usr/local/bin|/common/bin|'
The output was:
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3
My doubt is why there is no slash at the end of the last three approaches. I tried putting at the end of second one:
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's/\/usr\/local\/bin/\/common\/bin/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's_/usr/local/bin_/common/bin_/'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's:/usr/local/bin:/common/bin:'
echo '/dir1/dir2/usr/local/bin/dir3' | sed 's|/usr/local/bin|/common/bin|'
But got an error:
/dir1/dir2/common/bin/dir3
sed: -e expression #1, char 30: unknown option to `s'
/dir1/dir2/common/bin/dir3
/dir1/dir2/common/bin/dir3