繁体   English   中英

管道输入命令

[英]Piping into a command

有没有办法通过管道输入命令?

例如:

在一个文件夹中,我有 2 个文件:

  1. 文件名
  2. 文件 1

文件名包含:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM