grep查找命令
grep命令是linux系统中,最常用的文件字符串查找命令,职业生涯中,我们几乎离不开它。
下面是它最简单的用法,不过实际情况下,我们通常会添加很多参数或结合其他的命令去进行使用。
1grep ""
常用命令参数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14: 文件名称,多个文件使用空格隔开
: 匹配字符
-n : 显示行号
-i : 忽略字符大小写
-l : 列出符合条件的文件名
-r : 查找所有子目录
-w : 只显示整行全匹配
-o : 只显示匹配的关键字部分
-A : 关键字所在行、以及之后num行
-B : 关键字所在行、以及之前num行
-C : 关键字所在行、以及前后num行
–include="*.txt": 仅查找指定后缀的文件
> file: 将查询结果保存到文件中
>> file: 将查询结果追加到文件中
如,查询哪些文件中包含“ok”:
1grep "ok" -r -l --include="*" ./
grep和cat/tail的结合
通过grep和cat/tail的结合,我们可以轻易的实现返回文件中的关键字所在行、以及附近指定行的内容,尤其是在我们查询程序日志的时候,用的非常多。
语法:
1
2
3cat | grep
或
tail -f | grep
参数说明:
1
2
3:文件名称,多个文件使用空格隔开
:匹配字符
:grep命令参数
cat结合示例:在文件default.log中查找“异常”,并收集前后10行记录
1cat default.log | grep "异常" -C 10
tail结合示例:在文件default.log中查找“异常”,并进行实时收集
1tail -f default.log | grep "异常"
grep和sed的结合
sed命令是用来编辑一个或多个文件、简化对文件反复操作的神器,它和grep的结合令我们的文件操作起来更加的得心应手。
我们下面就来看看,它能给我们带来怎样的体验。
sed语法介绍:
1sed
常用命令参数:
1
2-i: 直接修改配合的文件内容
-e: 不修改原文件,仅输出,通常可以和“>或>>”命令结合,输出到新文件中
常用动作说明:
1
2
3
4
5s: 替换字符,替换指定的字符串,如:sed -i 's/匹配字符/新字符/g' a.txt,末尾的/g表示替换所有匹配的字符
a: 新增行,在指定行或指定范围的行的下一行新增内容,如: sed -i '2a\bbb' a.txt
i: 新增行,在指定行或指定范围的行的上一行新增内容,如: sed -i '2i\bbb' a.txt
c: 替换行,替换指定行或指定范围的行的内容,如:sed -i '3,5c\replacestr' a.txt
d: 删除行,删除指定行或指定范围的行,如: sed -i '3d' a.txt
注: 动作前面的数字表示第几号,或者几行到几行
扩展案例:
查找某个文件中的关键字,并在其下新增一行数据
1sed -i '/关键字/a\新增的一行数据' a.txt
grep与sed命令结合的示例:
上面我们已经了解sed命令的特性,那我们现在就试试,它和grep命令的结合,究竟能撞出怎样的火花?
下面的命令实现的是:将某个目录以及子目录的所有文件中的关键字“ok”统一替换为“yes”
1sed -i 's/ok/yes/g' `grep "ok" -r -l --include="*" ./`
上面 `` 括起来的grep命令,表示将grep命令查询的结果作为操作文件。