如何在 zsh 变量上运行 grep?

Ser*_* Vu 3 grep scripting zsh

我想内联以下 2 个命令:

big_query_that_returns_text > in.txt
$ printf '%s\n' "foo" "bar" | grep -f /dev/stdin in.txt
Run Code Online (Sandbox Code Playgroud)

通过查找foobar输入来工作in.txt

但是当我尝试

printf '%s\n' "foo" "bar" | grep -f /dev/stdin big_query_that_returns_text
Run Code Online (Sandbox Code Playgroud)

我收到

zsh: argument list too long: grep
Run Code Online (Sandbox Code Playgroud)

我也试过

var=`big_query_that_returns_text`
printf '%s\n' "foo" "bar" | grep -f /dev/stdin $var
printf '%s\n' "foo" "bar" | grep -f /dev/stdin "$var"
Run Code Online (Sandbox Code Playgroud)

但我收到同样的错误。

gle*_*man 5

这是一个进程替换的地方:它是一个代码块,就像一个文件

将大查询结果通过管道传送到 grep 的标准输入

big_query_that_returns_text | grep -f <(printf '%s\n' "foo" "bar")
Run Code Online (Sandbox Code Playgroud)

如果生成“foo”和“bar”的命令更复杂,您可以在进程替换中使用任意换行符来提高可读性:

big_query_that_returns_text \
| grep -f <(
      printf '%s\n' "foo" "bar"
  )
Run Code Online (Sandbox Code Playgroud)