echo 'abc' | grep input.txt
这将返回'找不到文件abc' 我想要做的是用abc找到所有的所有行。 我知道我可以写简单
grep abc input.txt
但如果我想将输入传递给grep怎么办?
答案 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