我有一个像这样的文件,
"xxxxxx"
"yyyyyy"
"aaaaaa"
"cccccc"
"bbbbbb"
"eeeeee"
"oooooo"
"zzzzzz"
想要替换\n
此文件中的每个文件我使用:
tr '\n' ',' < INPUT > OUTPUT
运行正常。输出结果符合预期:
"xxxxxx","yyyyyy","aaaaaa","cccccc"....
然而
我无法使用sed
或awk
对这个文件进行任何操作,什么都做不了(结果总是空白,例如: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 在这个问题上更宽容一些……。