如何在Unix的“cat”命令中添加文字

9
我正在尝试将一些文件与cat命令连在一起,并在文件之间添加一些文字。由于我是Unix新手,对语法不太熟悉。

以下是我失败的尝试:

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

我该怎么修复这个问题?应该使用管道还是其他东西?

3个回答

9
一个进程替换似乎可行:
$ cat <(echo 'FOO') foo.txt <(echo 'BAR') bar.txt
FOO
foo
BAR
bar

您还可以在此处文档中使用命令替换。

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

如果您不对 FOO 进行单引号处理,可以在 here-doc 中嵌入命令替换。 - chepner
@chepner 很好知道,但我在这里该怎么用? - Lev Levitsky
我已经对你的问题进行了相当大的编辑;我认为你不能将here-strings与其他文件参数组合到cat中(在我的测试中,这些here-strings被忽略了)。 - chepner
@chepner 哦,我现在明白了,谢谢。我从来没有像那样使用过这种 here-strings。 - Lev Levitsky
@chepner 应该有两个<,然后是这样的吗? cat <<EOF... - Lev Levitsky

7

使用命令组将输出合并为一个流:

{
   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

您可以通过进程替换和命令替换来进行一些技巧操作(请参见Lev Levitsky的回答),以便使用一个命令来完成所有操作(而不是在这里使用单独的cat进程),但使用如此少的文件时,这种方法已经足够高效。


避免重复指定相同的输出文件的好选择。 - ealfonso

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

以此类推。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接