1
0:root@SERVER:/root # echo "something" | sed -e 's/^/\t/g'
tsomething
0:root@SERVER:/root # 

AIX/ksh .. why doesn't it works? I just want to put a "tab" before every line!

1
  • What happens if instead of typing "\t" you press Ctrl-V then press Tab? Commented Dec 11, 2011 at 16:02

2 Answers 2

5

\t on the right hand side of a sed expression is not portable. Here are some possible solutions:

POSIX shell

Bear in mind that since many shells store their strings internally as cstrings, if the input contains the null character (\0), it may cause the line to end prematurely.

echo "something" | while IFS= read -r line; do printf '\t%s\n' "$line"; done

awk

echo "something" | awk '{ print "\t" $0 }'

Perl

echo "something" | perl -pe 'print "\t"'
1
  • Is pointless to specify perl's -n switch here. -p implies the -n's effect. Commented Dec 19, 2011 at 10:19
1

If your shell is bash, ksh93 or zsh, you can use shell escaping to put a literal tab in the sed command. The quoting syntax $'…' treats every character inside the quotes literally except for backslashes and single quotes. You can use the usual backslash escapes inside these quotes.

sed -e $'s/^/\t/g'
2

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.