传递命令

时间:2018-08-20 00:46:23

标签: linux bash pipe

有一种方法可以传递到命令中吗?

例如:

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

  1. 文件名
  2. file1

文件名包含:

file1

file1包含:

11
22
33
44
11

当我运行命令时(在包含filesname和file1的同一文件夹中):

ls -l | grep 11

或命令:

cat filesname | grep 11

它不会返回:

11
11

3 个答案:

答案 0 :(得分:1)

您的grep 11命令将过滤您传递给它的所有行,并且仅显示包含11的行。如果您运行的命令没有grep 11部分,您将看到没有包含11的命令,因此行为是正确的。

另一方面,做cat filesname | grep 11是浪费时间。 grep可以接受文件作为参数,因此您可以直接执行grep 11 filesname

答案 1 :(得分:0)

将内容通过管道传输到grep时,它将解释为要处理的 text ,而不是要处理的 filename

反引号可以运行一个命令并返回另一个命令的文本。

解决方案1: grep 11 `ls` grep 11 `cat filesname` 我省略了-l,因为只需要文件名,而不需要文件元数据。

xargs是另一种方式:

解决方案2: ls | xargs grep 11 cat filesname | xargs grep 11

答案 2 :(得分:0)

您正在寻找xargs实用工具。

cat filesname | xargs grep 11

或更简单地讲,无需无用的使用cat:

xargs grep 11 < filesname

这将在文件名的每一行上运行grep 11 <line>。由于您的行是文件名,因此它将运行grep 11 file1