将文件内容和自定义文本输出连接到新文件中

მამ*_*აძე 3 bash files cat

很抱歉问一个菜鸟问题,但是,好吧,我是菜鸟,所以......

给定两个文件,比如file1contenttext1和file2content text2,我想创建一个file3包含 content的新文件text1newtextinbetweentext2。我希望一些命令像

cat file1 (dontknowwhat "newtextinbetween") file2 > file3
Run Code Online (Sandbox Code Playgroud)

有没有一些dontknowwhat可以做我想要的?如果没有,最好的方法是什么?

ter*_*don 7

这里有两种方法:

  1. 将命令分组

     $ { cat file1; echo "newtextinbetween"; cat file2; } > file3
     $ cat file3
     text1
     newtextinbetween
     text2
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用子shell

     $ ( cat file1; echo "newtextinbetween"; cat file2 ) > file3
     $ cat file3
     text1
     newtextinbetween
     text2
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用命令替换

     $ printf '%s\nnewtextinbetween\n%s\n' "$(cat file1)" "$(cat file2)" > file3
     $ cat file3
     text1
     newtextinbetween
     text2
    
    Run Code Online (Sandbox Code Playgroud)

    如果您不想要每个块之间的换行符,您可以执行以下操作:

     $ printf '%snewtextinbetween%s\n' "$(cat file1)" "$(cat file2)" > file3
     $ cat file3
     text1newtextinbetweentext2
    
    Run Code Online (Sandbox Code Playgroud)

  • ... 或 (bash/zsh/ksh) 甚至`printf '%snewtextinbetween%s\n' "$(<file1)" "$(<file2)"` 如果你不是爱猫人士 (3认同)
  • 可以使用 `{` 来分组而不是 `(`。 (3认同)

Bas*_*ing 5

另一种方法是使用进程替换:

cat file1 <(echo "newtextinbetween") file2 > file3
Run Code Online (Sandbox Code Playgroud)

编辑:如果您不echo添加换行符,请echo -n改用。

  • @მამუკაჯიბლაძე 一点都不失礼!您应该始终接受您个人认为最有用的答案。请注意,更安全/更便携的方法是 `cat file1 &lt;(printf '%s' "newtextinbetween") file2 &gt; file3` 因为并非所有 `echo` 实现都理解 `-n`(请参阅 [为什么 printf 比 echo 更好?](https://unix.stackexchange.com/q/65803))。 (4认同)