在一行上打印文件内容

时间:2016-03-17 10:42:09

标签: bash

我完全失去了尝试做一些我认为非常简单的事情:逐行读取文件并将所有内容输出到一行。

我在RHEL上使用bash。 考虑一个带有文件(test.in)的简单测试用例,其中包含以下内容:

one
two
three
four

我想要一个读取此文件和输出的脚本:

one two three four
Done

我试过这个(test.sh):

cat test.in | while read in; do
    printf "%s " "$in"
done
echo "Done"

结果如下:

# ./test.sh
 foure
Done
# 

似乎printf导致光标在%s后立即跳转到同一行的第一个位置。在执行echo -e "$in \c"时,问题仍然存在。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您可以使用:

echo -- $(<test.in); echo 'Done'

one two three four
Done

答案 1 :(得分:0)

echo -- `cat file` | tail -c +4

--是为了保护您免受命令行选项的影响。但是在我的shell中打印出--。我认为这可能是一个错误。将不得不检查。

因此,您需要检查是否必须在实施中加入| tail -c +4

答案 2 :(得分:-1)

另一个答案:

tr '[:space:]' ' ' < file
echo

这也必须是最安全和最有效的。如果您只想转换新行而不是任何空格,请使用\n