Linux三剑客
grep
grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep的选项
-n:打印行号
-A(after):打印过滤内容的前N行
-B(before):打印过滤内容的后N行
-C(center):打印过滤内容的前后N行
-E:支持扩展正则 egrep就是grep -E
-v:取反
-o:只打印匹配到的内容
-w:精确匹配
-P:支持Perl正则
-i:忽略大小写
-r:递归检索文件中的内容
-R:递归检索文件中的内容,包括软链接文件
-l:只显示文件名
-h:只显示文件内容
-f:对比文件内容,内容少的文件放在签名,内容多的文件放在后面在取反看不同的文件内容
-c:统计行数 类似与wc -l
-G:支持基础正则
-m:显示前N行内容 类似于head -N
sed
sed对文本的处理很强大,并且sed非常小,参数少,容易掌握,他的操作方式根awk有点像。在sed中,我们的核心内容主要分为四个部分
增
删
改
查
还有模式空间与保存空间
sed命令执行流程
执行一个查询命令后,sed做的事情
1.先是按行读取内容
2.每读取一行内容,都会进行一次判断,判断是否是你想要的行
3.如果不是,则判断是不是加了-n选项
4.如果加了-n,就读取下一行
5.如果没加-n,就会将所有内容输出到命令行(默认输出)
6.如果是你想要的行则判断执行的后续动作(p d s a i c)
7.动作处理完成后,输出指定的内容
8.即使内容输出出来了,sed也会继续往后读直到文件的最后一行
sed选项与动作
| sed命令选项 |
选项含义 |
sed命令动作 |
动作含义 |
| -n |
取消默认输出 |
p(print) |
打印 |
| -r |
支持扩展正则 |
d(delete) |
删除 |
| -i |
直接修改文件 |
a(append) |
追加 |
|
|
i(insert) |
插入 |
|
|
c(replace) |
替换 |
sed命令-查
[root@m01 ~]# cat 1.txt
ba:123 123
bb:222 123
babs
1234
OOX
o
# sed显示单行内容
[root@m01 ~]# sed -n '3p' 1.txt
babs
# sed显示多行内容
[root@m01 ~]# sed -n '1,3p' 1.txt
ba:123 123
bb:222 123
babs
# sed模糊匹配
[root@m01 ~]# sed -n '/ba/p' 1.txt
ba:123 123
babs
# sed多个模糊匹配
[root@m01 ~]# sed -nr '/ba|b/p' 1.txt
ba:123 123
bb:222 123
babs
# sed范围匹配
[root@m01 ~]# sed -nr '/ba/,/12/p' 1.txt
ba:123 123
bb:222 123
babs
1234
# sed隔指定行数读取文件内容
[root@m01 ~]# sed -n '1~2p' 1.txt
ba:123 123
babs
OOX
sed命令-删
# 删除指定行数
[root@m01 ~]# sed '2d' 1.txt
ba:123 123
babs
1234
OOX
o
# 删除最后一行
[root@m01 ~]# sed '$d' 1.txt
ba:123 123
bb:222 123
babs
1234
OOX
sed命令-增
# 替换整行内容
[root@m01 ~]# sed '3cxxx' 1.txt
ba:123 123
bb:222 123
xxx
1234
OOX
o
# 在指定行后面加入一行内容
[root@m01 ~]# sed '$axxx' 1.txt
ba:123 123
bb:222 123
babs
1234
OOX
o
xxx
# 在指定行前面插入一行内容
[root@m01 ~]# sed '$ixxx' 1.txt
ba:123 123
bb:222 123
babs
1234
OOX
xxx
o
sed命令-改
# 基础用法
[root@m01 ~]# sed 's#ba#aa#g' 1.txt
aa:123 123
bb:222 123
aabs
1234
OOX
o
# 使用正则
[root@m01 ~]# sed 's#[0-9]#777#g' 1.txt
ba:777777777 777777777
bb:777777777 777777777
babs
777777777777
OOX
o
# 后向引用
[root@m01 ~]# ifconfig eth1|sed -nr 's#^.*inet (.*) net.*#\1#gp'
172.16.1.61
sed的模式空间
sed命令逐行处理文件,将当前处理的行写入模式空间进行处理,sed在该行上执行完所有命令后将处理好的行打印到屏幕上,sed处理完一行就将其从模式空间删除,然后将下一行内容写入模式空间中。sed读取文件内容不会将换行符一起读进去,需要加N
# 将文件中的所有换行符替换成空格
N:在读取文件时,让sed把下一行内容读进去
[root@m01 ~]# sed 'N;N;N;N;N;s#\n# #g' 1.txt
ba:123 123 bb:222 123 babs 1234 OOX o
# 循环N将文件中的所有换行符替换成空格
[root@m01 ~]# sed ':label;N;s#\n# #g;t label' 1.txt
ba:123 123 bb:222 123 babs 1234 OOX o