在 Solaris 9 上使用 /usr/xpg4/bin/tr 和 /usr/bin/tr 的奇怪现象

在 Solaris 9 上使用 /usr/xpg4/bin/tr 和 /usr/bin/tr 的奇怪现象

我有一个像这样的文件,

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

想要替换\n此文件中的每个文件我使用:

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

运行正常。输出结果符合预期:

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

然而

我无法使用sedawk对这个文件进行任何操作,什么都做不了(结果总是空白,例如:sed 's/,/hello/g'什么都不显示),在 Linux 中使用 GNU 软件包可以正常工作,但在非 GNU 软件包中则不行。有人能告诉我这是为什么吗?

提前致谢,

安德斯

答案1

# 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

看来问题出在 sed 而不是 tr 身上……使用 XPG4 sed 似乎确实解决了这个问题。至于具体原因,grrrrmmm……

编辑:实际上,当我在 tr 命令的输出中添加换行符时,它确实适用于两个 sed 版本,因此我认为 /usr/bin/sed 确实需要换行符,而 /usr/xpg4/bin/sed 在这个问题上更宽容一些……。

相关内容