一、grep基本使用
语法结构:模糊过滤查找内容
grep '查找的内容' file
cat file | grep '查找屏幕上输出的内容'
参考选项:
r:递归过滤文件的内容
v:取反
w:过滤单词,以空格分割,精确匹配
i:不区分大小写
n:过滤到内容的具体行号
c:统计单词次数
o:查看匹配过程
E:支持扩展正则
A:显示查找内容的下N行
B:显示查找内容的上N行
C:显示查找到内容上下各N行
二、sed
作用:替换
- 内容查找替换
- 增加内容
- 替换内容
- 删除内容
- 格式化输出,反向引用
语法结构:
1、基础常用:
grep '找谁' file
sed -n '/找谁/动作' file # 模糊过滤,默认输出所有内容 -n:只打印查找到内容;默认输出全部
动作:p--输出查找到的内容;d--删除查找到内容的行
sed -n 'np' file # 打印输出第n行的数据
sed 选项参数:-n 取消默认输出
sed 's#替换谁#替换成谁#g' 替换
2、模糊过滤:
sed -n '/过滤到内容/p' file
sed -n '/开始/,/结束/p' file
参数选项:-r--->支持扩展正则
3、sed删除
sed '3d' file
sed '//d' file
4、sed增加内容
sed '3a 内容' file 在第3行的下面插入内容
sed '3i 内容' file 在第3行处插入内容
sed '3c 内容' file 替换整行内容 (写shell使用系统优化)
sed '3w 1.txt' file 将第3行的内容保存到文件中
sed -i '3c 内容' file 将会直接执行(因为有i)
5、sed反向引用
sed 's#()#\1#g' file
案例:
【数据准备】
[root@web01 ~]# head -5 /etc/passwd > test.txt
[root@web01 ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
1、按照行查找内容
[root@web01 ~]# sed -n '3p' test.txt
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2、输出文件的2-4行
[root@web01 ~]# sed -n '2,4p' test.txt
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
3、输出文件的最后一行
[root@web01 ~]# sed -n '$p' test.txt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
4、输出文件的3~最后一行
[root@web01 ~]# sed -n '3,$p' test.txt
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
5、处理其他命令的输出
[root@web01 ~]# cat test.txt | sed -n '3p'
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@web01 ~]# ifconfig eth0|sed -n '2p'
inet 10.0.0.7 netmask 255.255.255.0 broadcast 10.0.0.255
6、删除源文件的内容
[root@web01 ~]# sed -i '2,4d' test.txt
[root@web01 ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sed '3c 内容' file # 替换整行内容(写shell使用系统优化)
[root@web01 ~]# sed '3c hehe' 1.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
hehe
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
8、支持正则,[:/]:表示:或者/或者:/
[root@web01 ~]# sed 's#[:/]# #g' test.txt
root x 0 0 root root bin bash
bin x 1 1 bin bin sbin nologin
daemon x 2 2 daemon sbin sbin nologin
root x 0 0 root root bin bash
adm x 3 4 adm var adm sbin nologin
lp x 4 7 lp var spool lpd sbin nologin
9、反向代理
[root@web01 ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (10.0.0.200) net.*s#\1#g'
inet 10.0.0.200 netmask 255.255.255.0 broadcast 10.0.0.255
[root@web01 ~]# ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (10.0.0.200) net.*$#\1#g'
10.0.0.200
常用方式:
# 过滤区间范围进行统计,过滤时间日志进行切割
# 需求:统计最近2小时的日志或者过滤昨天一天的日志
1)日志切割
mv access.log 2023-10-10-access.log
mv access.log 2020-10-11-access.log
2)取区间范围统计
[root@oldboy ~]# sed -n '/2023:03:25:14/,/2023:04L00L10/p' access.log
知识点小结:
sed参数选项:
-i 修改源文件
-r 支持扩展正则
-n 取消默认输出
1.指定行
sed -n '3p' file
sed -n '3,5p' file 区间
2.模糊过滤
sed -n '//p' file
sed -n '//,//p' file
3.sed删除
sed '3d' file
sed '2,5d' file
sed '//,//d' file
4.sed增加
sed '3c 内容' file
sed '3a' '3i' '3w'
5.sed替换 支持正则 []
sed 's###g' file
sed 's@@@g' file
模式+动作
sed '2s###g' file # 只替换第2行的内容
6.后向引用想要谁就把谁保护起来()
sed -r 's#()()()#\2#g'
使用sed的动作分隔获取不连续的行
sed -n '2p;4p' test.txt
标签:bin,sbin,sed,nologin,详解,file,root,三剑客
From: https://www.cnblogs.com/9Dusk/p/18365137