Search code examples
linuxsed

What is the proper way to insert tab in sed?


What is the proper way to insert tab in sed? I'm inserting a header line into a stream using sed. I could probably do a replacement of some character afterward to put in tab using regular expression, but is there a better way to do it?

For example, let's say I have:

some_command | sed '1itextTABtext'

I would like the first line to look like this (text is separated by a tab character):

text    text

I have tried substituting TAB in the command above with "\t", "\x09", " " (tab itself). I have tried it with and without double quotes and I can't get sed to insert tab in between the text.

I am trying to do this in SLES 9.


Solution

  • You can simply use the sed i command correctly:

    some_command | sed '1i\
    text    text2'
    

    where, as I hope it is obvious, there is a tab between 'text' and 'text2'. On MacOS X (10.7.2), and therefore probably on other BSD-based platforms, I was able to use:

    some_command | sed '1i\
    text\ttext2'
    

    and sed translated the \t into a tab.

    If sed won't interpret \t and inserting tabs at the command line is a problem, create a shell script with an editor and run that script.