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
)
此处的文档避免创建中间的、一次性使用的文件。我希望在获取 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
)