【发布时间】:2018-07-03 21:45:48
【问题描述】:
有一种方法可以对文件进行分类,通过某些内容对其进行过滤,然后输出一个具有相同名称的新文件?我正在这样做,我得到一个空文件,但如果我用不同的文件名创建它是有效的。我不想创建新文件。
例子:
File="My_test_file.txt"
cat ${File} | grep -v "test" > ${File}
那样不行,我必须创建另一个文件才能使其工作,如下所示:
File="My_test_file.txt"
cat ${File} | grep -v "test" > ${File}.tmp
有什么想法吗?
【问题讨论】:
-
我认为目前的任何一个答案都没有解决“为什么”。解释一下:管道的所有部分并行执行。因此,当输入中的
cat仍在运行(或者,可能只是启动但根本还没有运行)时,打开文件以进行输出(因此被截断!)。 -
(顺便说一句,
cat ${File}最好写成cat "$File":在这种情况下,花括号对正确性没有任何作用,而缺少双引号会使内容容易发生字符串拆分和全局扩展, 所以如果你有一个带空格的文件名就行不通了。比这更好的是完全取消cat并让grep直接从输入文件中读取)。 -
@CharlesDuffy 我同意这个问题的答案没有解释原因,但你的引文中接受的答案并没有说明如何,这是 OP 想知道的。
-
@jeff6times7,我添加了三个(错误,现在是四个)额外的副本,专门关注“如何”,将它们放在关注“为什么”的之上。
标签: shell unix cat createfile