我想在 bash 中使用带有通配符的 cat 以便将多个小文件(每个文件都是一个句子)打印到标准输出。但是,单独的文件内容并没有用换行符分隔,我希望这样做是为了便于阅读。
如何向此命令添加某种文件分隔符?
答案1
定义一个 shell 函数,在每个文件后输出行尾,并使用它代替cat
:
endlcat() {
for file in "$@"; do
cat -- "$file"
echo
done
}
那么你就可以使用endlcat *
.
循环for
遍历所有提供的参数 ( $@
),当您使用 等通配符时,这些参数已被 shell 转义*
。要求--
不要因以破折号开头的文件名而阻塞。最后echo
输出换行符。
答案2
只需使用循环而不是简单的cat
:
for file in /path/to/targetdir/*; do
echo "-------- $file -------"
cat "$file"
done
答案3
如果您想要文件之间的文件名,请使用tail
:
tail -n +1 ./*
(如果您想要tac
代替cat
,某些tail
实现可以-r
选择等效tac
功能)
答案4
如同@特登的答案,如果您碰巧更喜欢将来看到文件名,您可以使用以下命令head
:
$ head *file*
==> file_1 <==
file 1 content
==> file_2 <==
file 2 content
==> file_3 <==
file 3 content
head
默认为前 10 行,因此在没有命令选项的情况下使用它(每个文件一个句子)是完全可以的。否则,您需要该-n X
选项。