连接文件

众所周知,你不能在同一命令中使用相同的文件进行输入和输出。例如,

$ cat header.txt body.txt >body.txt

不做你想做的事。当 cat 读取 body.txt 时,它已经被重定向截断并且它是空的。最终的结果是 body.txt 只能保存 header.txt 的内容*。*

人们可能会想到通过进程替换来避免这种情况,即命令

$ cat header.txt <(cat body.txt) > body.txt

在文件被重定向截断之前,会强制 body.txt 的原始内容以某种方式保存在某个缓冲区中。它不起作用。括号中的 cat 仅在设置了所有文件描述符后才开始读取文件,就像外部文件描述符一样。在这种情况下尝试使用进程替换没有意义。

将文件添加到另一个文件的唯一方法是创建一个中间文件:

$ cat header.txt body.txt >body.txt.new
$ mv body.txt.new body.txt

当使用“ 就地编辑” 选项(通常是 -i) 调用时,sedperl 或类似程序在地毯下执行的操作。