Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a file looking like this,


Wanting to replace each \n in this file I use:

tr '\n' ',' < INPUT > OUTPUT

Which works fine. The output is to be expected:



I can't do any manipulation using sed or awk on this file, none what so ever (the result is always blank, like: sed 's/,/hello/g' displays nothing), in Linux using the GNU package this works fine, but with non GNU not. Can anyone tell me why this is?

Thanks in advance,


share|improve this question
up vote 2 down vote accepted
# ls
# /usr/xpg4/bin/tr '\n' ',' < testfile.txt
# /usr/xpg4/bin/tr '\n' ',' < testfile.txt | sed 's/,/hello/g'
# ls -l /usr/xpg4/bin/sed
-r-xr-xr-x   1 root     bin        27460 Apr  7  2002 /usr/xpg4/bin/sed
# /usr/xpg4/bin/tr '\n' ',' < testfile.txt | /usr/xpg4/bin/sed 's/,/hello/g'
sed: Missing newline at end of file standard input.
# command -v sed

It seems sed is to blame, not tr ... . Using XPG4 sed does seem to fix the problem. As to why exactly, grrrrmmm... .

Edit: actually, when I add a newline to the output of the tr command, it does work with both sed editions, so I suppose /usr/bin/sed really needs a newline, and /usr/xpg4/bin/sed is a little more forgiving on the matter... .

share|improve this answer
Sweet, I forgot about xpg4 sed! – Anders Jul 29 '10 at 14:51

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.