下面是一个使用grep时容易犯的错误:
grep-r随便什么。>输出.file
对于那些不知道这个命令的人,下面是发生的事情:
- -第页--表示搜索全部子目录(r=“递归”)。
- 无论什么--的一串我们正在寻找。
- 。--指的是当前目录。
- >输出.file--重定向将输出转换为文件,而不是转换为标准输出(屏幕)。
因此,该命令的意思是“在该目录及其子目录中的所有文件中查找字符串“whatever”,并将找到的任何行写入output.file。”
你看到错误了吗?我也没有,第一次输入时,按回车键,然后等待。然后等待。然后等待。
最后,我按下ctrl-c,看了看输出文件,开始大笑。(我不确定我笑的是谁——我自己,还是写命令的人。)问题是,我告诉grep去看看每一个目录中的文件。我从没说过不查看它正在创建的文件。因此,它在愉快地运行,读取自己的输出文件,在每一行上找到搜索字符串(当然),并在末尾追加新行。
这是一个典型的错误——没有记住计算机只是一个非常快白痴。
如果你想知道如何避免这个问题,这里有两个解决方案。他们为什么工作的解释是作为练习离开。
grep-r什么的。>/输出.file
grep-r任意。|cat>output.file
免责声明
我用了Cygwin公司在下面Windows NT(Windows NT).我不知道它在其他情况下会表现出相同的行为Unices公司,尽管我怀疑会。此外,在准备此写操作时,我确保可以重新创建此行为,并发现只有在子目录中至少有一次点击时才会发生此行为。有野心的人可以阅读源代码并解释为什么会发生这种情况。