[英]Piping into a command
有没有办法通过管道输入命令?
例如:
在一个文件夹中,我有 2 个文件:
文件名包含:
file1
文件 1 包含:
11
22
33
44
11
当我运行命令时(在包含文件名和文件 1 的同一文件夹上):
ls -l | grep 11
或者命令:
cat filesname | grep 11
它不会返回:
11
11
您的grep 11
命令将过滤您传递给它的所有行,并仅显示包含11
。 如果你在没有grep 11
部分的情况下运行相同的命令,你会看到没有任何包含11
,因此行为是正确的。
另一方面,做cat filesname | grep 11
cat filesname | grep 11
是浪费时间。 grep
可以接受文件作为参数,因此您可以直接执行grep 11 filesname
。
当事物通过管道传输到grep
,它被解释为要处理的文本,而不是要处理的文件名。
反引号可以运行一个命令并返回另一个命令的文本。
解决方案 1: grep 11 `ls` grep 11 `cat filesname`
我省略了-l
因为只需要文件名,不需要文件元数据。
xargs
是另一种方式:
解决方案2: ls | xargs grep 11 cat filesname | xargs grep 11
ls | xargs grep 11 cat filesname | xargs grep 11
您正在寻找xargs实用程序。
cat filesname | xargs grep 11
或者更简单地说,没有无用的使用 cat:
xargs grep 11 < filesname
这将在文件名的每一行上运行grep 11 <line>
。 由于您的行是文件名,因此将运行grep 11 file1
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.