2013-02-14 71 views
6

我试图将cat一些文件放在一起,同时在文件之间添加一些文本。我是Unix新手,我没有语法的问题。如何将文本文本添加到Unix'cat'命令中

这里是我的失败尝试:

cat echo "# Final version (reflecting my edits)\n\n" final.md echo "\n\n# The changes I made\n\n" edit.md echo "\n\n#Your original version\n\n" original.md > combined.md 

我该如何解决这个问题?我应该使用管道还是什么?

回答

5

如果我理解你,应该是这样的:

echo "# Final version (reflecting my edits)\n\n" >> combined.md 
cat final.md >> combined.md 
echo "\n\n# The changes I made\n\n" >> combined.md 
cat edit.md >> combined.md 

等。

+0

是的!谢谢! – incandescentman 2013-02-14 22:09:48

4

的工艺替代似乎工作:

$ cat <(echo 'FOO') foo.txt <(echo 'BAR') bar.txt 
FOO 
foo 
BAR 
bar 

您也可以使用此文档中命令替换。

$ cat <<EOF 
FOO 
$(< foo.txt) 
BAR 
$(< bar.txt) 
EOF 
+0

如果您没有单引号FOO,则可以在here-doc中嵌入命令替换。 – chepner 2013-02-14 20:53:53

+0

@chepner很高兴知道,但我如何在这里使用它? – 2013-02-14 20:55:09

+0

我已经编辑了你的问题,而且很沉重;我不认为你可以将这里的字符串与其他文件参数合并为“cat”(在我的测试中,这里的字符串被忽略)。 – chepner 2013-02-14 20:57:23

6

使用命令组的输出合并成一个流:

{ 
    echo -e "# Final version (reflecting my edits)\n\n" 
    cat final.md 
    echo -e "\n\n# The changes I made\n\n" 
    cat edit.md 
    echo -e "\n\n#Your original version\n\n" 
    cat original.md 
} > combined.md 

有技巧,你可以用进程替换和命令替换(见利Levitsky的答案)扮演一个做这一切命令(而不是这里使用的单独的cat进程),但这应该足够高效,而且文件很少。

+0

很好的选择,以避免不得不重复指定相同的输出文件 – erjoalgo 2018-01-25 03:49:23