I have tried:
echo -e \"egg\\t \\t\\t salad\" | sed -E \'s/[[:blank:]]+/\\t/g\'
Which results in:
eggtsalad
OSX's sed only understands doesn't understand \t in the pattern, not in the replacement\t at all, since it's essentially the ancient 4.2BSD sed left over from 1982 or thenabouts. Use a literal tab (which in bash and vim is Ctrl+V, Tab), or install GNU coreutils to get a more reasonable sed.
A workaround for tab on osx is to use "\ ", an escape char followed by four spaces.
If you are trying to find the last instance of a pattern, say a " })};" and insert a file on a newline after that pattern, your sed command on osx would look like this:
sed -i '' -e $'/^\ \})};.*$/ r fileWithTextIWantToInsert' FileIWantToChange
The markup makes it unclear: the escape char must be followed by four spaces in order for sed to register a tab character on osx.
The same trick works if the pattern you want to find is preceded by two spaces, and I imagine it will work for finding a pattern preceded by any number of spaces as well.
Another option is to use $(printf '\t') to insert a tab, e.g.:
echo -e "egg\t \t\t salad" | sed -E "s/[[:blank:]]+/$(printf '\t')/g"
Use ANSI-C style quoting: $'string'
sed $'s/foo/\t/'
So in your example, simply add a $:
echo -e "egg\t \t\t salad" | sed -E $'s/[[:blank:]]+/\t/g'
try awk
echo -e "egg\t \t\t salad" | awk '{gsub(/[[:blank:]]+/,"\t");print}'
Try: Ctrl+V and then press Tab.