Bash- 为什么不使用临时文件就不能覆盖文件?
Bash- why can't a file be overwritten without the use of a temp file?
覆盖文件的标准过程通常如下:
awk '{print *3}' file > tmp file
tmpFile > file
但是,有时这会有点麻烦,因为在临时文件不再使用后必须将其删除。
那么,为什么不能通过以下方式执行此操作(不需要临时文件):
awk '{print *3}' file > file
我问的原因是因为我知道可以这样追加到文件:
awk '{print *3}' file >> file
因此,如果如上所示使用 >>
附加文件,效果很好,为什么不能以相同的方式覆盖文件。为什么这两个命令如此不同?
此外,是否存在绕过对临时文件的需求的方法(可能以类似于第 2 个摘录的方式),或者第一个摘录是唯一的方法?
注意:awk命令无关紧要,可以用任何其他命令代替
使用临时文件是个好主意,因为您永远无法确定是否会将整个文件读入内存。如果您尝试在它被读取之前写入它,那么您可能会得到与您预期不同的结果。
使用追加时,该命令总是在添加新内容之前遍历整个文件,因此绝不会留下要读取的文件部分。
可能不是一个好主意(尝试读取和写入同一个文件),但如果您坚持这样做,您可以使用 <>
运算符。
gawk '{print *3}' -- <> file
覆盖文件的标准过程通常如下:
awk '{print *3}' file > tmp file
tmpFile > file
但是,有时这会有点麻烦,因为在临时文件不再使用后必须将其删除。
那么,为什么不能通过以下方式执行此操作(不需要临时文件):
awk '{print *3}' file > file
我问的原因是因为我知道可以这样追加到文件:
awk '{print *3}' file >> file
因此,如果如上所示使用 >>
附加文件,效果很好,为什么不能以相同的方式覆盖文件。为什么这两个命令如此不同?
此外,是否存在绕过对临时文件的需求的方法(可能以类似于第 2 个摘录的方式),或者第一个摘录是唯一的方法?
注意:awk命令无关紧要,可以用任何其他命令代替
使用临时文件是个好主意,因为您永远无法确定是否会将整个文件读入内存。如果您尝试在它被读取之前写入它,那么您可能会得到与您预期不同的结果。
使用追加时,该命令总是在添加新内容之前遍历整个文件,因此绝不会留下要读取的文件部分。
可能不是一个好主意(尝试读取和写入同一个文件),但如果您坚持这样做,您可以使用 <>
运算符。
gawk '{print *3}' -- <> file