假设我想查找所有.txt
文件并搜索一些字符串。我会做:
find ./ -type f -name "*.txt" -exec egrep -iH 'something' '{}' \;
Run Code Online (Sandbox Code Playgroud)
如果我想做一个更复杂的过滤怎么办,像这样:
egrep something file.txt | egrep somethingelse | egrep other
Run Code Online (Sandbox Code Playgroud)
里面find -exec?(或类似)
请记住,我正在寻找一种可以在需要时轻松输入的解决方案。我知道这可以使用 shell 脚本通过几行来完成,但这不是我想要的。
ter*_*don 15
如果必须在 find 中执行此操作,则需要调用 shell:
find ./ -type f -name "*.txt" -exec sh -c 'grep -EiH something "$1" | grep -E somethingelse | grep -E other' sh {} \;
Run Code Online (Sandbox Code Playgroud)
其他替代方法包括使用xargs
:
find ./ -type f -name "*.txt" |
xargs -I{} grep -EiH something {} |
grep -EiH somethingelse |
grep -EiH other
Run Code Online (Sandbox Code Playgroud)
或者,对于任意文件名更安全(假设您find
支持-print0
):
find ./ -type f -name "*.txt" -print0 |
xargs -0 grep -EiH something {} |
grep -Ei somethingelse |
grep -Ei other
Run Code Online (Sandbox Code Playgroud)
或者,您可以只使用 shell 循环:
find ./ -type f -name "*.txt" -print0 |
while IFS= read -d '' file; do
grep -Ei something "$file" |
grep -Ei somethingelse |
grep -Ei other
done
Run Code Online (Sandbox Code Playgroud)