用两个空行作为分隔符连接多个文件?

用两个空行作为分隔符连接多个文件?

我正在尝试在每个文件之间加入两个换行符的 Markdown 文件。

我尝试使用以下命令:

paste -sd '\n\n' file1.md file2.md

这将使用换行符连接文件,而不是按照我的需要使用两个换行符。

我可以使用什么命令来连接任意数量的文件,\n每个连接之间有两个字符?

答案1

paste

:|paste -sd'\n' file1.md - - file2.md

答案2

除了cuonglm的回答之外:

:|paste -sd'\n' $(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -))

为此,您需要拥有所有文件,这些文件应连接在一个文件夹内,并且最好按字母数字排序。然后可以将输出重定向到文件。

这里发生了什么事?

:

这才是 bash 中真正的功能。这主要用于无操作,因为它只返回 true。

|

那是一个管道,它接受左侧命令的输出并管道它在正确的命令的输入中。

$(sed $"s/\s/ - - /g" <<< $(ls -1|paste -sd" " -))

这只是构建了粘贴所需的行。它看起来像

file1 - - file2 - - file3 - - file4 ...

因此,当调用粘贴时,它会将列出的文件中的所有行写入标准输出。当未找到文件或未调用“-”文件时,粘贴会从标准输入读取并从 : 中获取 TRUE 值,该值通过管道输送到粘贴中。

通常,每个文件在写入标准输出后都会附加一个制表符运算符。使用 -d"\n" 参数进行粘贴时,选项卡将与换行符交换。

因此,现在粘贴将用换行符分隔的文件写入标准输出,当粘贴找到“-”时,它会采用 true 并且仅将分隔符写入标准输出 - 换行符。

答案3

awk你一起可以处理多种的FNR==1文件并在除第一个文件 ( ) 之外的每个文件 ( ) 之前打印分隔符NR>1。所以

awk '(NR>1 && FNR==1){printf ("\n\n")};1' file1.md file2.md ... fileN.md

连接文件并在其间添加指定的分隔符。


如果您不介意最终输出中的尾随分隔符,在这种特殊情况下(分隔符是许多空行),您也可以执行以下操作(使用gnu sed):

sed -s '${G;G}' file1.md file2.md ... fileN.md

答案4

不是最好的解决方案,但适合您的情况:

echo -e `cat file1.md`"\n\n"`cat file2.md`

相关内容