grep -f 带有此处文档

grep -f with a here document

此处的文档避免创建中间的、一次性使用的文件。我希望在获取 20 个可能文件的完整路径时使用它(不使用 find -o 语法)。我希望以下内容有效:

find | grep -f <<EOF
Controller.java
Main.java
Config.java
EOF

但我得到:

grep: option requires an argument -- f

我是不是误解了这里的文档是如何工作的?或者 grep -f 不能很好地处理文件描述符?

我也对 find 的解决方案持开放态度,它可以获取 -name 值的列表,但我不想输入 -o 20 次。


最佳选择:

cat <<EOF |  xargs --delimiter '\n' --max-args=1 -I% find -iname "*%*"
Controller.java
Main.java
Config.java
EOF

这在智力上并不令人满意,因为对于每个搜索模式,您 运行 find 在整个文件层次结构上一次,这对于大型目录层次结构来说无法很好地扩展。

如果您使用的是 /proc 系统(例如 linux),请尝试:

#!/bin/sh

find . | grep -f /proc/self/fd/3 3<< EOF
Controller.java
Main.java
Config.java
EOF

或者,如果您的 shell 支持进程替换(Bourne Shell 不支持):

#!/bin/bash

find . | grep -f <( cat << EOF
Controller.java
Main.java
Config.java
EOF
)