I need to substitute some text inside a text file with a replacement. Usually I would do something like
sed -i 's/text/replacement/g' path/to/the/file
The problem is that both text
and replacement
are complex strings containing dashes, slashes, blackslashes, quotes and so on. If I escape all necessary characters inside text
the thing becomes quickly unreadable. On the other hand I do not need the power of regular expressions: I just need to substitute the text literally.
Is there a way to do text substitution without using regular expressions with some bash command?
It would be rather trivial to write a script that does this, but I figure there should exist something already.
Best Answer
When you don't need the power of regular expressions, don't use it. That is fine.
But, this is not really a regular expression.
So, if
/
is your problem, use|
and you don't need to escape the former.PS: About the comments, also see this Stackoverflow answer on Escape a string for sed search pattern.
Update: If you are fine using Perl try it with
\Q
and\E
like this,@RedGrittyBrick has also suggested a similar trick with stronger Perl syntax in a comment here or here