Aug 16, 2011
tom

Strangeness using /usr/xpg4/bin/tr and /usr/bin/tr on Solaris 9

Question

I have a file looking like this,

"xxxxxx"
"yyyyyy"
"aaaaaa"
"cccccc"
"bbbbbb"
"eeeeee"
"oooooo"
"zzzzzz"

Wanting to replace each n in this file I use:

tr 'n' ',' < INPUT > OUTPUT

Which works fine. The output is to be expected:

"xxxxxx","yyyyyy","aaaaaa","cccccc"....

However

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,

Anders

Answer

# ls
testfile.txt
# /usr/xpg4/bin/tr 'n' ',' < testfile.txt
"xxxxxx","yyyyyy","aaaaaa","cccccc","bbbbbb","eeeeee","oooooo","zzzzzz",,# 
# /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.
"xxxxxx"hello"yyyyyy"hello"aaaaaa"hello"cccccc"hello"bbbbbb"hello"eeeeee"hello"oooooo"hello"zzzzzz"hellohello
# command -v sed
/usr/bin/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… .

Related posts:

  1. Differences between linux and Solaris /usr/bin/env
  2. Format output from /usr/bin/time to ignore parts of seconds
  3. Can I place my script in /usr/bin?
  4. How do I reset ownership of /usr/bin/sudo on Linux?
  5. why should I chmod 511 /usr/local/apache/bin/httpd?

Leave a comment