将某些东西作为命令的第一个输入

时间:2014-02-16 17:45:48

标签: bash unix pipe

echo 'abc' | grep input.txt

这将返回'找不到文件abc' 我想要做的是用abc找到所有的所有行。 我知道我可以写简单

grep abc input.txt

但如果我想将输入传递给grep怎么办?

6 个答案:

答案 0 :(得分:2)

您可以使用变量:

var="abc" && grep "$var" input.txt

我假设您从另一个命令中获取关键字abc,然后您也可以运行

grep "$(command)" input.txt

e.g。在上面的例子中,那将是

grep "$(echo 'abc')" input.txt

答案 1 :(得分:2)

以下内容将读取要从stdin搜索的内容:

grep -e "$(cat)" input.txt

因此,您请求的行为:

echo "abc" | grep -e "$(cat)" input.txt

...将正常工作。那说,你能描述用例吗?可能有更好的方法来完成你想要完成的任务。


好的 - 用例在其他地方的评论中得到澄清。使用的正确工具不是管道而是命令替换:

grep -e "$(commands-to-get-the-pattern)" input.txt

答案 2 :(得分:1)

你应该写:

grep "abc" input.txt

如果你想管道它:

cat input.txt | grep "abc"

这也是可能的:

grep "$(command)" input.txt

OR

grep `command` input.txt

因此,如果您想使用echo命令,请执行以下操作:

grep "$(echo abc)" input.txt

OR

grep `echo abc` input.txt

你也可以写:

var="abc" && grep `echo $var` input.txt

OR

var="abc" && grep $(echo $var) input.txt

答案 3 :(得分:1)

尝试:

echo 'abc' | grep -f - input.txt

答案 4 :(得分:0)

您可以使用

cat input.txt | grep abc

grep然后在管道输入中搜索'abc'。

对于动态搜索模式,您可以使用

grep $(<command>) input.txt

<command>是输出搜索模式的命令。

答案 5 :(得分:0)

我认为这个问题是因为你有一个要在同一个文件中搜索的关键字列表。这是你可以采取的一种方式:

$ cat sought_words 
include
return
int dot
blah

$ cat sought_words | while read line; do echo "searching for" $line; grep -n "$line" stack_dots2.c; done
searching for include
1:#include <stdio.h>
2:#include <stdlib.h>
3:#include <string.h>
searching for return
20:      return 1;
28:  return 0;
searching for int dot
8:  int dotless_length = 30;
searching for blah

"$line"而不仅仅$line进行点击可以查找包含空格的int dot,而不是将dot解释为另一个文件名来搜索int in