我有一个命令,我想通过另一个命令的结果(复数;多行)过滤其输出。到目前为止,我已经将第一个命令的结果发送到文件并使用以下命令过滤第二个命令grep -f
:
command1 > /tmp/output
command2 | grep -f /tmp/output
rm /tmp/output
我想将其放入单个命令中,而不需要临时文件。
答案1
如果您的 shell 提供“进程替换”,请尝试
command2 | grep -f <(command1)
如果没有,您还可以使用命令替换在命令行上传递正则表达式列表:
command2 | grep -e "$(command1)"
command1
这将对正则表达式列表的最大大小有一个较低的限制,并且还意味着如果的输出包含 NUL 字符,它将无法工作(无论如何,许多实现grep
也会对它们造成阻塞)。-f