12

我正在尝试cat三个文件并在每个文件之后获取并插入一个换行符\n ,我想使用类似的东西:

cat f1 f2 f3|tr "\EOF" "\n"

没有成功。

实现这一目标的最简单方法是什么?

4

5 回答 5

25
cat f1 <(echo) f2 <(echo) f3 <(echo) 

或者

perl -pe 'eof&&s/$/\n/' a b c
于 2012-08-20T12:30:06.247 回答
9

一旦你cat有了文件,它们之间就不会有EOF,也没有其他方法可以找到边界,所以我建议像for file in f1 f2 f3; do cat $file; echo; done或者,带有缩进,

for file in f1 f2 f3; do
    cat $file;
    echo;
done
于 2012-08-20T12:31:29.403 回答
8

EOF 不是字符,甚至不是 CTRL-D - 这只是在交互式输入中指示 EOF 的常用终端方法。所以你不能使用翻译字符的工具来以某种方式修改它。

对于这个简单的案例,最简单的方法是不要再担心尝试一次性完成它了cat:-)

cat f1; echo; cat f2; echo; cat f3

会做得很好。任何更多数量的文件都可能值得一个脚本,但我看不出这个小案例的必要性。

如果您想组合所有这些流以进行进一步处理,只需在子 shell 中运行它们:

( cat f1; echo; cat f2; echo; cat f3 ) | some_process
于 2012-08-20T12:31:18.153 回答
1

我遇到了类似的问题,我的情况对我最有效的是:

grep "" file1 file2 file3 | awk -F ':' '{print $2}'
于 2013-06-11T08:10:25.023 回答
-3

试试这个:

find f1 f2 f3 | xargs cat
于 2012-08-21T14:09:55.533 回答