使用猫通配符打印强制换行

使用猫通配符打印强制换行

我想在 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选项。

相关内容