将stdout传递给grep作为模式参数

时间:2014-06-17 18:10:35

标签: bash grep pipe

我很确定有人已经问过这个问题,但我无法找到它,无论如何,这里是:

让我们说我们有一个文件:

$cat file
AAA 123
BBB 456
CCC 789

我想做一些事情:

printf "BBB\nAAA\n" | grep - file

其中" - "是标准输出。但grep并不认为它是stdout。

并获取

BBB 456
AAA 123

它也应该适用于许多模式,而不是echo "BBB"。而不是回声我没有管道和列表作为输出。

2 个答案:

答案 0 :(得分:1)

使用gnu grep你可以这样做:

printf "BBB\nAAA\n" | grep -f - file

答案 1 :(得分:0)

我终于找到了一个并不完全说服我的技巧:

grep -f <(printf "BBB\nAAA\n") file

返回:

AAA 123
BBB 456

但为什么这是file顺序?

我发现它不实用,因为它可能相当长而不是printf "BBB\nAAA\n"