[texhax] Low-level TeX question: string substitution macro
tsc25 at cantab.net
Tue May 29 17:31:32 CEST 2007
Michael Doob wrote:
> On Tuesday 29 May 2007 8:38 am, Toby Cubitt wrote:
>> I'm trying to write an internal macro that does string substitution, in
>> order to escape certain characters in the string before writing it to a
>> file. (The package is supposed to be writing a sed script, so I need to
>> escape characters that have a special meaning in regular expressions.)
> Can't sed do this itself?
In two passes, obviously yes. (Pass the sed script itself through a
simple sed command to escape the chars, then run the escaped script).
I'd be OK with this for my own personal use, but it's a bit ugly in a
package that may be used by others.
Originally, I assumed there must be an easy way to get sed to do a
simple substitution of one sequence of characters by another, without
any regexp processing. Then it occurred to me that in all my years of
using sed, I'd never needed to do this (because I could always just
escape the special characters manually in the regexp). Having read the
sed man pages again, it seems there's no sed command that does simple
substitution (unless I'm missing something obvious - always possible!).
> I'm almost afraid to mention this, but
> perl has a builtin function called quotemeta which does exactly what you
Thanks for that. I guess I could use perl instead (I'd have to learn it
first!). But sed is probably slightly more widespread than perl. I'm not
fixated on sed though. Maybe it would be simpler in awk, or perhaps even
m4 would be able to do it!? (Not sure I want to go there - coding m4 is
probably an even bigger brainf*ck than TeX!)
Still, it feels like TeX should be able to do what I want. After all, it
is a macro language designed specifically for processing text...
> Please, please, please, no language wars. It's just a possible
> option for Tony.
"Toby", in fact :)
More information about the texhax