如何根据关键字查找某个目录下的所有文件

ybdesire 2011-10-27 03:08:12
比如grep s xxx/*
可以查找xxx目录下含有字符串s的文件,但如果xxx目录下还有其他目录xxx/xx, xxx/x,grep的这种用法就不好查找到xx和x中的文件
请问大家如何才能根据关键字查找到某个目录下的所有文件么?
...全文
321 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
向良玉 2011-10-29
  • 打赏
  • 举报
回复
find . | xargs grep "the string you what to search" | awk -F'[\t :]' '{print $1}' | sort | uniq
ybdesire 2011-10-29
  • 打赏
  • 举报
回复
谢谢
这样能查找出的信息太多了,想缩小信息范围
grep -R 'typedef*pid_t' xxx/*
用 'typedef*pid_t'不对啊,请问该怎么用呢?

[Quote=引用 11 楼 qq120848369 的回复:]
grep pid_t filename就可以了。
[/Quote]
windman521 2011-10-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qq120848369 的回复:]

grep -Rl "s" *
[/Quote]
支持一个
delphiwcdj 2011-10-28
  • 打赏
  • 举报
回复
grep "string" path -rn
qq120848369 2011-10-28
  • 打赏
  • 举报
回复
grep pid_t filename就可以了。
ybdesire 2011-10-28
  • 打赏
  • 举报
回复
非常感谢
不知道有没有简单一点的方法...
:)


[Quote=引用 8 楼 qq120848369 的回复:]
find . | xargs egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'

这样就行了,找出所有的文件里所有的符合范围的小数。
[/Quote]
ybdesire 2011-10-28
  • 打赏
  • 举报
回复
比如要查找 pid_t的定义typedef xxx pid_t
用 'typedef*pid_t'不对啊,请问该怎么用呢?
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
find . | xargs egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'

这样就行了,找出所有的文件里所有的符合范围的小数。
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ybdesire 的回复:]

谢谢大家回复,呵呵

用grep如何确定关键字的范围呢?
比如要查找的字符串是数字,范围[1.25,9.36]
[/Quote]

linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:1.25" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
1.25
linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:0.1" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:1.24" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:8.35" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
8.35
linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:9.36" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
9.36
linux-t4lu:/home/owenliang/csdn/cAndCpp # echo "val:123.2" | egrep -o "[0-9]*\.*[0-9]+" | awk '{if(1.25<=$0 && $0<=9.36){print}}'
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
find . | xargs grep -l "main"

find 进程 递归打印所有文件输送到标准输出(重定向到管道)

xargs进程 读取标准输入(重定向到管道),并且创建子进程执行execlp(grep -l "main" arg1 arg2....)

arg1,arg2 是xargs进程读标准输入解析出来作为grep的命令行参数,fork子进程被继承而来的。
ybdesire 2011-10-27
  • 打赏
  • 举报
回复
谢谢大家回复,呵呵

用grep如何确定关键字的范围呢?
比如要查找的字符串是数字,范围[1.25,9.36]
ybdesire 2011-10-27
  • 打赏
  • 举报
回复
谢谢ls
请问能否简单解释一下,我菜鸟看不懂管道+xargs grep
wangtingguang 2011-10-27
  • 打赏
  • 举报
回复
-R 递归查找
qq120848369 2011-10-27
  • 打赏
  • 举报
回复
grep -Rl "s" *
chinasingle 2011-10-27
  • 打赏
  • 举报
回复
find ./xxx/ -name '*.*' |xargs grep 'keyword'

18,773

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧