我正在尝试将三个文件拼接起来,并在每个文件之间插入一个换行符\n
,我想到可以使用以下命令:
cat f1 f2 f3|tr "\EOF" "\n"
没有成功。
最简单的方法是什么?
cat f1 <(echo) f2 <(echo) f3 <(echo)
或者perl -pe 'eof&&s/$/\n/' a b c
EOF
并不是一个字符,甚至不是CTRL-D - 这只是通常的终端输入中指示EOF的方法。因此,您不能使用用于翻译字符的工具来修改它。cat
中完成它 :-)cat f1; echo; cat f2; echo; cat f3
will do the trick就可以了。如果文件数量更多的话,可能需要写一个脚本,但对于这种小情况来说,我看不出必要性。
如果你想将所有这些流合并以进行进一步处理,只需在子shell中运行它们即可:
( cat f1; echo; cat f2; echo; cat f3 ) | some_process
一旦您使用cat
命令连接文件,它们之间将没有EOF,也没有其他方法可以找到边界,因此我建议使用以下命令:for file in f1 f2 f3; do cat $file; echo; done
或者带有缩进的:
for file in f1 f2 f3; do
cat $file;
echo;
done
我遇到了类似的问题,对我来说最好的解决办法是:
grep "" file1 file2 file3 | awk -F ':' '{print $2}'
如果你不仅限于使用cat
工具,可以尝试使用bat
https://github.com/sharkdp/bat。
bat -p file1 file2 file3
另外,如果您有动态文件计数,可以使用通配符:
bat -p *.extension
试试这个:
find f1 f2 f3 | xargs cat
<(echo)
这个习惯用法给出一个加一的赞。我在十多年的Bash脚本编写中不知怎么错过了它! - Adam Liss