grep -f和here文档

时间:2017-09-06 18:55:25

标签: grep heredoc gnu-findutils

此处文档避免创建中间一次性使用文件。我希望在获取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一次,因为每个搜索模式都不能很好地扩展到大型目录层次结构。

1 个答案:

答案 0 :(得分:1)

如果你在使用/ 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
)