从标准输入读取grep的表达式

59

我该如何让grep从标准输入(stdin)读取表达式呢?

比如(以下方法无效):

grep -i -f &0 /path/to/text/file < "/regexp/"
1个回答

66

使用单个破折号加上-f来表示标准输入:

$ echo Content | grep -f - notice.html 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
...

注意:这已经使用GNU grep进行了测试-我不确定它是否由POSIX指定。


1
@Dor:使用-E扩展表达式怎么样?那行吗? - thkala
只要包含独立的破折号,这在MinGW(Windows)上可以正常工作! - Peter Mortensen
实际上,我从grep中得到了预期的匹配结果,但也有一些无法解释的误报。搜索规范(来自标准输入)是一系列数字(如1.174500、45045.367300、45045.442300、45045.502500、45675.290200、48149.824300、48149.883600和52485.123600),我使用了grep的“-A”和“-B”选项:“grep -f - -A 10 -B 10 <file>”。我从<file>中远离的地方得到了误报匹配。 - Peter Mortensen
1
这个问题很可能早就被解决了。如果你搜索45045.502500,你会意识到 . 是一个字符通配符,对吧? - jcoppens
5
好的,我会尽力进行翻译。以下是对所提供内容的翻译:似乎这个功能不适用于所有人,肯定不能在 Mac 上运行。 - SalmonKiller
1
@SalmonKiller grep -f /dev/stdin 可能有效。 - CervEd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接