You probably know the s “substitute” command that sed offers. But did you know you that other character could be used as separator?

shell> echo "Hello World" | sed "s/World/Neo/"
Hello Neo
shell> echo "Hello World" | sed "s_World_Neo_"
Hello Neo

That’s right, ‘_’ can be used instead of ‘/’. In this case, ‘/’ become a normal character and doesn’t have to be escaped anymore.

It is very useful when working with URLs:

shell> echo "http://hostA/pathA/" | sed "s_hostA/pathA_hostB/pathB_"

Even the space character (‘ ’) is suitable; just don’t forget the one at the end of the command.

shell> echo "Hello World" | sed "s World Neo "
Hello Neo

The official documentation formalises this behavior:

The / characters may be uniformly replaced by any other single character within any given s command. The / character (or whatever other character is used in its stead) can appear in the regexp or replacement only if it is preceded by a \ character.