linux-基础篇-三剑客grep,sed,awk(详细且常用)
·
#日常工作常用
一、greo,sed,awk功能比对用途
| grep | sed | awk | |
| 功能 | 搜索,不修改数据 | 单行编辑数据 | 按分隔符(如逗号、空格)拆分文本字段,计算 |
| 用途 | 过滤日志,参数 | 批量修改文本数据 | 报表生成,提取文件信息并导出 |
二、grep命令--文本搜索
1.常见命令
#筛选java进程
ps -ef|grep java
#筛选文件夹下的ip引用
grep "192.168.1.2" ./* -nir
2.更多参数
-i 忽略大小写
-v 打印不匹配的
-w 匹配整个单词
-n 显示匹配行数
-r 递归查找指定目录下所有文件
-a 强制文本扫描二进制文件
-c 等同于--color 高亮展示
-o 打印关键词
-e 多个选择匹配,也可以管道符分开
-q 是否匹配到,echo $? 0匹配成功,1匹配失败
-E 使用扩展正则表达式 等同于egrep(可以让grep支持“|”,“+”,“?”,“()”)
-C 50 前后50行
-A 50 后50行(after)
-B 50 前50行(before)
#使用案列
#忽略大小写,error前后30行打印text.log
grep -nai 'error' -C30 text.log
#精确匹配 -w
#只打印lsj的内容
grep -w 'lsj' text.log
#关键词 -o
#打印相关lsj的行,但只有lsj
grep -o "lsj" text.log
#打印error和info的日志 必须加-E,不然不识别
grep -E "error|info" log.log
排除注释的行以及空行(很常用)
grep -Ev '#|^$' text.conf
三、sed命令
1.命令格式:
sed [options] [sed-commands] [input-file]
sed [选项] [sed命令] [输入文件]
#选项:
-i 修改文件
-e 多点编辑
-n 打印处理的行
#命令:
-s 取代
-g 全局查找替换
-a 下一行插入
-d 删除
-p 打印
2.实际应用
#aa替换为bb
sed -i 's/aa/bb/g' text.txt
##查找1-10行数的文件
sed -n '1,10p' text.txt
##查找aaa相关的行数
sed -n '/aaa/p' text.txt
#查找.结尾的行数(\是转译)
sed -n '/\.$/p' text.txt
#先把text.txt的1-3行删除,再把bb改成cc
sed -e '1,3d' -e 's/bb/cc/' text.txt
四、awk命令
1.命令格式
awk options 'pattern {action}' file
参数说明:
options:是一些选项,用于控制awk的行为。pattern:是用于匹配输入数据的模式。如果省略,则awk将对所有行进行操作。{action}:是在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行
options 常用参数说明:
- -F:指定分隔符,默认使用空格进行分隔
- -V:赋值一个用户定义变量
- BEGIN{ 这里面放的是执行前的语句 }
- END {这里面放的是处理完所有的行后要执行的语句 }
- {这里面放的是处理每一行时要执行的语句}
2.常用案例
awk 后一定一定一定要单引号
$0 输出所有列
$1 输出第一列
$2 输出第二列
$N 输出第N列
$NF 输出最后一列
NR 第几行
##打印第二行 第一列的信息
awk 'NR==2{print $1}' aa.log
## 打印第一列的信息
awk '{print $1}' aa.log
## 过滤第一列大于2的信息
awk '$1>2' aa.log
#过滤第一列大于2并且第二列等于'lsj'的行
awk '$1>2 && $2=="lsj"' aa.log
#打印当前系统的总用户
awk 'END {print "当前系统总用户:",NR}' /etc/passwd
#按照想要的列表打印磁盘容量
##%-30s 间隔10,并换行
df -h | awk 'BEGIN {printf "%-10s %-10s %-10s\n", "文件系统", "大小", "使用率"} NR>1 {printf "%-30s %-10s %-10s\n", $1, $2, $5}'
高级案例
给一个学生成绩信息,打印成表格
$ cat score.txt
Marry 78 84 77
Jack 66 78 45
Tom 48 77 71
Mike 87 97 95
Bob 40 57 62
结果:

五、正则表达式(三剑客及常用到的)
^ 表示搜索以什么开头。
$ 表示搜索以什么结尾。
^$表示空行,不是空格。
.代表且只能代表任意一个字符。
\转义字符
*重复0个或多个前面的一个字符。不代表所有
.*匹配所有的字符。
[a-z]匹配字符集合内任意一个字符
[^a]在括号里面^表示非,即不包含a或b或c。
{n.m}重复n到m次
参考资料:
更多推荐



所有评论(0)