连接文件
众所周知,你不能在同一命令中使用相同的文件进行输入和输出。例如,
$ 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
) 调用时,sed
或 perl
或类似程序在地毯下执行的操作。