1. 概述
- 在多个文件中 查找内容
2. 想干啥
- 目的
- 在 多个文件 中, 查找内容
- 准备
- 之前在 单个文件里 查找过内容
- 工具
- awk
- 前提
- 文件有固定格式
- 查找时有字段的要求
-
例子
# print $0 就一句话, 所以 不要 {} 也可以
> awk '{if($0 ~ <patter>){print $0}}' <fileName>
- grep
- 前提
- 这个要求没那么多
-
例子
> cat <fileName> | grep <pattern>
- 例子
- 要求
- 查找多个文件里, 含有 1 的行
- 并知道是哪个文件里的
-
文件
# 得到 1 2 3 三个文件, 每个文件的内容, 是 1 到 10
> seq 1 10 > 1
> seq 1 10 > 2
> seq 1 10 > 3
# 可以用 循环写, 也不难对吧
> for i in {1..3};do seq 1 10 > ${i};done
2. 思路1: cat | grep
-
命令
> cat * | grep '1'
- 结果
-
输出
1
10
1
10
1
10
- 感觉不行
- 找到了 1
- 但是不知道内容分布在 哪个文件里
3. 思路2: find | xargs grep
-
命令
# 不理解 find 的同学, 可以用 ls 代替
# 我就不怎么理解
# -name 支持 通配符, 我的目录下只有三个文件, 所以也可以不带
> find . -type f -name "*" | xargs grep "1"
- 结果
-
输出
1:1
1:10
2:1
2:10
3:1
3:10
- 这次还行
- 带了文件名了, 哈哈
- 搞定
4. 思路
- 思路
- find
- find
- 找到 特定文件
- 将 文件名, 传递给 grep
- grep
- 获取多个 文件名
- 挨个文件查找内容
- 找到的话, 就显示出来
- cat
- cat
- 将所有文件的内容, 放入流
- 将流传给 grep
- grep
- 收到一个流
- 文件名已经丢失了
- 查找内容
- 所以只能找到内容
- 区别
- grep 可以接受不同的东西
- 参数
- 收到参数后, 去找文件
- 流
- 收到流后, 直接在流里面找
- 所以文件名丢了
- 疑问1: 为啥跟了 xargs 的 grep 就自带行号, 而 跟了 cat 的就没有?
- grep 后面跟了多个文件名, 就会自己带
- 单个文件 或者 流 的时候就不带
linux 查找某目录下包含关键字内容的文件(文件内容)
grep -r "{关键字}" {路径}
例如:
grep -r "test" /data/reports
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)