我正在尝试在每个文件之间加入两个换行符的 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`