![如何从文件中 grep 一个单词并将其存储到另一个现有文件中?](https://linux22.com/image/119175/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E4%B8%AD%20grep%20%E4%B8%80%E4%B8%AA%E5%8D%95%E8%AF%8D%E5%B9%B6%E5%B0%86%E5%85%B6%E5%AD%98%E5%82%A8%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E7%8E%B0%E6%9C%89%E6%96%87%E4%BB%B6%E4%B8%AD%EF%BC%9F.png)
如何从文件中 grep 一个单词并将其存储到另一个现有文件中?
我尝试过的是
cat q1.txt | grep -i "osx" test.txt
我想从 test.txt 中 grep 它并将其存储到 q1 中,但是这种方法和其他方法都行不通
答案1
您可以完全删除cat
,然后您应该将输出重定向grep
到结果文件:
grep -i "osx" test.txt >q1.txt
这将搜索包含test.txt
字符串的行osx
(不区分大小写),并将这些行存储在 中q1.txt
。如果文件q1.txt
存在,则在将输出存储在其中之前,它将被截断(清空)。
如果您希望将输出附加到文件末尾,请使用>>
而不是>
作为重定向运算符。
您的命令:
cat q1.txt | grep -i "osx" test.txt
这实际上所做的是启动cat
和grep
并发。 cat
将读取q1.txt
并尝试将其写入其标准输出,该输出连接到 的标准输入grep
。
但是,由于您提供了grep
一个要读取的文件,因此它将完全忽略cat
发送给它的任何内容。
最后,test.txt
包含该字符串的所有行都osx
将输出到终端。
有一些东西通常被称为“无用的使用cat
”(或有时是“UUoC”),这意味着cat
调用可能会被完全删除,并且文件可能会被另一个工具直接读取。
极端的例子是:
cat test.txt | cat | cat | cat | grep -i "osx" | cat | cat >q1.txt
但即使只是
cat test.txt | grep -i "osx" >q1.txt
没有用,因为grep
它完全能够自行读取文件(如上所示)。即使它不是能够test.txt
自行打开,可以写
grep -i "osx" <test.txt >q1.txt
说标准输入应该来自文件test.txt
,标准输出应该转到q1.txt
文件
仅在连接数据时使用cat
(这就是它的主要用途)。还有一些其他用途cat
,但它超出了这个问题的范围。
有关的:
答案2
用于在文件中搜索并将结果写入“path/storage_file”:
grep -in pattern file > path/storage_file
要在文件中搜索并将结果附加(使用>>)到“path/storage_file”中:
grep -in pattern file >> path/storage_file
要在整个目录中搜索并将结果写入“path/storage_file”:
grep -in pattern * > path/storage_file
要在整个目录中搜索并将结果附加(使用 >>)到“path/storage_file”中:
grep -in pattern * >> path/storage_file