File1:
foo
bar
baz
File2:
bar.patch
grep -f file1 file2 > file1
预期结果,file1 包含 bar.patch,但它是空的。
grep 如何处理输入文件以使我无法重定向到它?
重定向>
发生在命令执行之前,因此 grep 看到空文件并且不返回任何内容。如果您确实想写入同一个文件,可以使用sponge https://linux.die.net/man/1/sponge命令(它是 moreutils 的一部分)。它缓冲输入并仅在数据结束后写入输出文件。例子:
grep -f file1 file2 | sponge file1
检查bash手册 https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Redirections有关重定向的详细信息:
在执行命令之前,它的输入和输出可以被重定向
使用 shell 解释的特殊符号。重定向允许
命令的文件句柄被复制、打开、关闭、引用
到不同的文件,并且可以更改命令读取的文件
并写信至。重定向也可用于修改文件句柄
当前的 shell 执行环境。以下重定向
运算符可以出现在简单命令之前或出现在任何位置,或者
可以遵循命令。重定向按照它们的顺序进行处理
出现,从左到右。
或者只是重定向到一个临时文件,然后mv
它超过了file1
.
grep -f file1 file2 > file3
mv -f file3 file1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)