有一种方法可以传递到命令中吗?
例如:
在一个文件夹中,我有2个文件:
文件名包含:
file1
file1包含:
11
22
33
44
11
当我运行命令时(在包含filesname和file1的同一文件夹中):
ls -l | grep 11
或命令:
cat filesname | grep 11
它不会返回:
11
11
答案 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
。