sed rare-delimiter (other than & | / ?...)

Unitech picture Unitech · Jan 30, 2011 · Viewed 8.3k times · Source

I've to apply the Unix command sed on a string (can contain #, !, /, ?, &, @ and all other characters) which can contains all types of character (&, |, !, /, ? ...)

Is it a complex delimiter (with two caracters ?) which can permits to outpass the error :

sed: -e expression #1, char 22: unknown option to `s'

Thanks in advance

Answer

thkala picture thkala · Jan 30, 2011

The characters in the input file are of no concern - sed parses them fine. There may be an issue, however, if you have most of the common characters in your pattern - or if your pattern may not be known beforehand.

At least on GNU sed, you can use a non-printable character that is highly improbable to exist in your pattern as a delimiter. For example, if your shell is Bash:

$ echo '|||' | sed s$'\001''|'$'\001''/'$'\001''g'

In this example, Bash replaces $'\001' with the character that has the octal value 001 - in ASCII it's the SOH character (start of heading).

Since such characters are control/non-printable characters, it's doubtful that they will exist in the pattern. Unless, that is, you are doing something weird like modifying binary files - or Unicode files without the proper locale settings.