Bash:连接多个文件并添加"\“新线”;彼此之间?

Bash:连接多个文件并添加"\“新线”;彼此之间?,bash,file,cat,Bash,File,Cat,我有一个小的Bash脚本,它获取一个目录的所有标记文件,并将它们合并到一个目录中,如下所示: for f in *.md; do (cat "${f}";) >> output.md; done for f in *.md; do (cat "${f}";) + "\newline" >> output.md; done 它工作得很好。现在我想在每个文档之间添加字符串“\newline”,如下所示: for f in *.md; do (cat "${f}";) &g

我有一个小的Bash脚本,它获取一个目录的所有标记文件,并将它们合并到一个目录中,如下所示:

for f in *.md; do (cat "${f}";) >> output.md; done
for f in *.md; do (cat "${f}";) + "\newline" >> output.md; done
它工作得很好。现在我想在每个文档之间添加字符串“\newline”,如下所示:

for f in *.md; do (cat "${f}";) >> output.md; done
for f in *.md; do (cat "${f}";) + "\newline" >> output.md; done
我该怎么做?上述代码显然不起作用。

您可以执行以下操作:

for f in *.md; do cat "${f}"; echo; done > output.md

您可以添加
echo
命令来添加换行符。为了提高性能,我建议将write
移动到
for
循环之外,以防止每次迭代时读取和写入文件

如果需要文本字符串
“\newline”
,请尝试以下操作:

for f in *.md; do cat "$f"; echo "\newline"; done > output.md
这假设
output.md
不存在。如果确实如此(并且您希望在最终输出中包含其内容),您可以执行以下操作:

for f in *.md; do cat "$f"; echo "\newline"; done > out && mv out output.md
这可防止出现错误
cat:output.md:输入文件是输出文件


如果您想覆盖它,您应该在开始之前将其覆盖。

这里有一个有趣的可能性,使用标准编辑器
ed

ed -s < <(
    for f in *.md; do
        [[ $f = output.md ]] && continue
        printf '%s\n' "r $f" a '\newline' .
    done
    printf '%s\n' "w output.md" "q"
)
ed-s<