cat file1 file2
将合并两个文本文件。但是,如果要在两者之间添加一些分隔符,例如的一行或两行********************************
,我是否必须打开第一个文件,并在其末尾添加该行,或者打开第二个文件,并在其顶部添加该行,然后运行该cat
命令?只需运行命令就能完成吗?
cat file1 file2
将合并两个文本文件。但是,如果要在两者之间添加一些分隔符,例如的一行或两行********************************
,我是否必须打开第一个文件,并在其末尾添加该行,或者打开第二个文件,并在其顶部添加该行,然后运行该cat
命令?只需运行命令就能完成吗?
Answers:
在中bash
,zsh
您可以执行以下操作:
cat file1 <(echo '********************************') file2
或mikeserv在他的评论中指出(在任何shell中):
echo '********************************' | cat file1 - file2
在David B Zash的Bash中:
cat file1 - file2 <<< '********************************'
文件中的任何换行符都会显示。如果您不希望在“分隔符”之后使用换行符(例如file2
,以换行符开头),则可以使用echo -n '****'
,因此请在*
。之后取消换行符。
echo
会的。
printf 'no newline' | tee file1 >file2; printf 'no newline' | cat file1 - file2
...<(echo -n '****')
禁止回显换行符。cat
仅在文件有一个(末尾)时显示一个。
另一种没有使用cat
从这里找到的方法,
awk 'FNR==1{print "******"}{print}' file1 file2 | sed '1d'
最后的sed 1d
管道是删除第一行,该行也将有定界符。
但是,sed
如果我们使用1_CR在他的注释中建议的命令,则很可能避免最终使用。
awk 'FNR==1 && NR!=1 {print "******"}{print}' file1 file2
sed
通过将awk
模式更改为FNR == 1 && NR != 1
您还可以将其拆分为多个命令:
cat file1; echo '------------'; cat file2
然后,您可以使用组命令或子shell对其进行管道传输或重定向:
# GROUP COMMAND:
{ cat file1; echo '----------'; cat file2; } | other-command
# ^ final semicolon is part of the syntax!
# SUBSHELL:
( cat file1; echo '----------'; cat file2 ) | other-command
当然,您可以将其写在多行上,而不是像通常那样使用分号。而且很容易使用另一个定界符将其扩展到另一个文件,等等。
echo '**********************' |cat file - file2