如何从文件中提取单词并将其存储到另一个现有文件中?
我试过的是
cat q1.txt | grep -i "osx" test.txt
Run Code Online (Sandbox Code Playgroud)
我想从 test.txt 中提取它并将其存储到 q1 中,但是这种方法和其他方法都不起作用
Kus*_*nda 10
您可以cat
完全删除,然后您应该将输出重定向grep
到结果文件:
grep -i "osx" test.txt >q1.txt
Run Code Online (Sandbox Code Playgroud)
这将搜索test.txt
包含字符串的行osx
(不区分大小写),并将这些行存储在q1.txt
. 如果文件q1.txt
存在,它将在输出存储在其中之前被截断(清空)。
如果您希望在文件末尾附加输出,请使用>>
而不是>
作为重定向运算符。
你的命令:
cat q1.txt | grep -i "osx" test.txt
Run Code Online (Sandbox Code Playgroud)
这是什么实际上做的是启动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
Run Code Online (Sandbox Code Playgroud)
但即使只是
cat test.txt | grep -i "osx" >q1.txt
Run Code Online (Sandbox Code Playgroud)
没用,因为grep
它完全能够自己从文件中读取(如上所示)。即使是不能够打开test.txt
其本身而言,一个可以写
grep -i "osx" <test.txt >q1.txt
Run Code Online (Sandbox Code Playgroud)
说标准输入应该来自test.txt
文件,标准输出应该去q1.txt
文件
cat
仅在连接数据时使用(这是它的主要用途)。也有一些其他用途cat
,但这超出了这个问题的范围。
有关的: