linux的centos7三剑客grepsedawk

老三:grep 过滤筛选信息
老二:sed 修改替换文件内容 擅长对文件中行操作
老大:awk 统计分析文件内容 擅长对文件中列操作

正则

. 表示任意字符
* 表示0个或多个前面字符
.* 表示都匹配
{} 表示前面字符的范围
+ 表示一个或多个前面的字符
? 表示0个或一个前面的字符
| 表示或者

grep 参数介绍与示例/查询过滤用
--------------参数介绍----------------
-c #显示多少行
-n #显示行号
-i #不区分大小写、
-v #取反
-r #遍历所有子目录
-A2 #后面跟数字,过滤出符合要求的行及下面2行(A后面的数字指定)
-B3 #后面跟数字,过滤出符合要求的行及上面3行
-C1 #后面跟数字,过滤出符合要求的行及上下1行
-o  #只查看匹配内容

# grep 参数 条件 文件路径 
[root@master01 ~]# ] grep -n 'nologin' /etc/passwd
----------------示例-----------------
[root@master01 ~]# ] docker images|grep "months\|GB"
多个条件 或

[root@master01 ~]# ] docker images|grep "months" |grep "GB"
多个条件 且

[root@master01 ~]# ] grep -n 'root' /etc/passwd
显示包含root行的内容和行号

[root@master01 ~]# ] grep -vn 'nologin' /etc/passwd
显示不包含nologin行的内容和行号

[root@master01 ~]# ] grep '[0-9]' /etc/inittab 
显示包含数字的行

[root@master01 ~]# ] grep -v '[0-9]' /etc/inittab 
显示不包含数字的行

[root@master01 ~]# ] grep '^#' /etc/inittab
显示以#号开头开头的行

[root@master01 ~]# ] grep -v '^#' /etc/inittab
显示不以#号开头开头的行

[root@master01 ~]# ] grep '^$' /etc/inittab
显示空行

[root@master01 ~]# ] grep 'r.o' /etc/passwd
. 表示任意字符

[root@master01 ~]# ] grep 'r*o' /etc/passwd
* 表示左边的字符重复出现多次或者0次 即r出现任意次数和0次

[root@master01 ~]# ] grep '.*' /etc/passwd
.* 表示任意字符

[root@master01 ~]# ] grep '行首.*行尾' /etc/passwd
匹配一行

[root@master01 ~]# ] grep 'o\{2\}' /etc/passwd
o匹配2次

[root@master01 ~]# ] egrep 'o{2}' /etc/passwd
o匹配2次    egrep高级匹配 需要加 e

[root@master01 ~]# ] egrep 'root|nologin' /etc/passwd
匹配root或者nologin

# 查看状态连接数  改ESTABLISHED就可以了
netstat -an |grep 'ESTABLISHED' |grep 'tcp' |wc -l
# 端口5672的tcp的ESTABLISHED状态连接数
netstat -an |grep 'ESTABLISHED' |grep -i '5672' |wc -l
sed 替换的时候常用
1.选项

什么是选项,就是前面加-的

-n 只显示匹配到的行 匹配root行
[root@master01 /zhang]# ] sed -n '/root/'p /zhang/123.txt 
-r 识别扩展正则   匹配 ro出现一次或者多次以t结尾
[root@master01 /zhang]# ] sed -nr '/ro+t/'p /zhang/123.txt 
-e 匹配多个条件  匹配第4行 和 bash行
[root@master01 /zhang]# ] sed -e '4'p -e '/bash/'p -n /zhang/123.txt 
-i 更改文件内容  删除1到3行内容
[root@master01 /zhang]# ] sed -i '1,3'd /zhang/123.txt 
2.命令

注意:匹配字符串一定要用//
什么是命令,就是在命令中间需要特殊操作的那些字母

 p print 输出信息
 [root@master01 /zhang]# ] sed -n '/root/'p /zhang/123.txt 
 I 不区分大小写
 [root@master01 /zhang]# ] sed -n '/halt/'Ip /zhang/123.txt 
 d delete 删除指定信息
[root@master01 /zhang]# ] sed  '1,3'd /zhang/123.txt    --先查看是否过滤正确
[root@master01 /zhang]# ] sed -i '1,3'd /zhang/123.txt   -- -i 在删除
 a append 附加信息 ,在指定信息后面添加新的信息
[root@master01 /zhang]# ] sed -i '4a\112 shen guangzhou' /zhang/123.txt  #在第4行下面添加内容
i insert 插入数据,在指定信息前面插入新的信息
[root@master01 /zhang]# ] sed -i '3i\word' /zhang/123.txt    #在第2行上面添加内容
s substitute  替换信息 s###g(全局替换)
[root@master01 /zhang]# ] sed -i 's#word#holle#g' /zhang/123.txt
= 为匹配到的行上面加上行号
[root@master01 /zhang]# ] sed  '/holle/=' /zhang/123.txt 
[root@master01 /zhang]# ] sed  '/holle/=' /zhang/123.txt|xargs -n2  #内容显示为一行分两列为一行
r 文件合并
[root@master01 /zhang]# ] sed -i '1r /etc/fstab' /zhang/123.txt 
把fstab文件添加到123.txt的第一行后面
1.查数据
  -n只显示匹配到的行 条件 文件信息   p print 输出信息
[root@master01 /zhang]# ] sed -n '/miao/p' 123.txt    #显示miao这行数据
[root@master01 /zhang]# ] sed -n '/miao/p;/xue/p' 123.txt   #显示miao和xue两行数据
[root@master01 /zhang]# ] sed -n '/miao/,/xue/p' 123.txt   #显示miao到xue之间的连续数据
[root@master01 /zhang]# ] sed -n '1,3p' 123.txt   #显示1到3行数据
[root@master01 /zhang]# ] sed -n '3p' 123.txt   #显示第3行数据
2.添加数据
[root@master01 /zhang]# ] sed -i '1i099 huang beijing' 123.txt   #在第1行前面添加内容 
[root@master01 /zhang]# ] sed -i '3i111 ming shanghia' 123.txt   #在第3行前面添加内容
[root@master01 /zhang]# ] sed -i '$a107 huang beijing' 123.txt   #在尾行添加内容
[root@master01 /zhang]# ] sed -i '4a112 shen guangzhou' 123.txt  #在第4行后面添加内容
[root@master01 /zhang]# ] sed -i -e '/hai/ihaiqian' -e '/hai/ahaihou' 123.txt  #在hai前面添加haiqian 后面添加haihou
[root@master01 /zhang]# ] sed '$achengdou01\nchengdou02' 123.txt #在尾行连续添加多行信息 \n 分开添加
3.删除数据
[root@master01 /zhang]# ] sed -i '3d' 123.txt  #删除第3行数据
[root@master01 /zhang]# ] sed -i '1,3d' 123.txt  #删除1到3行数据
[root@master01 /zhang]# ] sed -i '/haiqian/d' 123.txt  #删除haiqian行
[root@master01 /zhang]# ] sed -i '3d;5d' 123.txt  #删除第1行 第3行数据
[root@master01 /zhang]# ] sed -i '/^$/d' 123.txt   #删除空行信息 ^$ 代表空行
4.修改信息
-i 代表插入修改 #改前内容#改后内容#  把文本中python改成java
格式:sed -i 's#修改前内容#修改后内容#g' 文件信息
[root@master01 ~]# ] sed -i 's#python#java#g' /zhang/test.txt 
[root@master01 ~]# ] sed -i.bak 's#python#java#g' /zhang/test.txt  #-i后面加.bak备份文件

#获取ip信息 's#.*net(.*)/24 brd (.*) scope.*#\1#g  \1 表示获取前面第一个括号里匹配的内容
[root@master01 /zhang]# ] ip a s eth0|sed -n '3p'|sed -r 's#.*net(.*)/24 brd (.*) scope.*#\1#g'

#批量修改命令 's#(.*).txt#mv & \1.png#g' & 获取前面zhang01-zhang10.txt  |bash 执行
[root@master01 /zhang]# ] ls zhang*.txt|sed -r 's#(.*).txt#mv & \1.png#g'|bash
awk命令

截取分段功能,默认是以空格分隔符

[root@master01 /zhang]# ] awk -F ':' '{print $1}' 123.txt 
[root@master01 /zhang]# ] awk -F ':' '{print $0}' 123.txt 
[root@master01 /zhang]# ] awk '{print $0}' 123.txt 
[root@master01 /zhang]# ] awk -F ':' '{print $1,$2,$3}' 123.txt 
[root@master01 /zhang]# ] awk -F ':' '{print $1"#"$2"#"$3}' 123.txt 

awk 多个条件 或

docker images|awk '/months|GB/{print $1":"$2}'

awk 多个条件 且

docker images|awk '/months/&&/GB/{print $1":"$2}'
1.匹配
[root@master01 /zhang]# ] awk '/oo/' 123.txt 
全文匹配
[root@master01 /zhang]# ] awk -F ':' '$1~/oo/' 123.txt 
匹配第一段包含oo的行
[root@master01 /zhang]# ] awk -F ':' '$1~/o+/' 123.txt 
用正则匹配
[root@master01 /zhang]# ] awk -F ':' '/root/{print $1}/user/{print $1}' 123.txt 
[root@master01 /zhang]# ] awk -F ':' '/root|user/{print $1}' 123.txt
包含root或user的
2.数字匹配
[root@master01 /zhang]# ] awk -F ':' '$3==1' 123.txt 
:分隔 匹配第3列等于1的行
[root@master01 /zhang]# ] awk -F ':' '$3==4 {print $1}' 123.txt 
匹配第3列等于4的行 打印第一列
3.指定打印出来的分隔符
OFS="##" 代表用##隔开
[root@master01 /zhang]# ] awk -F ':' '{OFS="##"}{print $1,$2,$3}' 123.txt 
4.if语句
if 后面语句要用小括号扩起来 if ($3>7) 找出第3列大于7的值 
[root@master01 /zhang]# ] awk -F ':' 'OFS="#" {if ($3>7) print $1,$3}' 123.txt 
5.NF字段个数
表示显示字段最后一列
awk -F / '{print $NF}' 123.txt
6.NR显示行号
[root@master01 /zhang]# ] awk -F ':' '{print NR":"$0}' 123.txt   #显示行号 
[root@master01 /zhang]# ] awk -F ':' 'NR<=6' 123.txt   #显示6行及6行前内容
[root@master01 /zhang]# ] awk -F ':' 'NR<=9 && $1~/root/' 123.txt  #匹配小于9行并且root行
[root@master01 /zhang]# ] awk -F ':' '{print $NR":"$NF}' 123.txt   #匹配行号 匹配总列数
7.$0整行内容匹配
[root@master01 /zhang]# ] awk '{print NR":"$0}' 123.txt  
显示出行数以冒号隔开 匹配整行内容
8.赋值
[root@master01 /zhang]# ] awk -F ':' '$1="root"' 123.txt 
把第1列内容全部变为root
[root@master01 /zhang]# ] awk -F ':' '{OFS=":"}$1="root"' 123.txt 
9.求和
#查看文件有多少空行
[root@master01 ~]# ] awk '/^$/{i=i+1}END{print i}' /etc/services 
#查看有多少普通用户
[root@master01 ~]# ] awk '/bash$/{i=i+1}END{print i}' /etc/passwd
# ! 感叹号 取反 获取虚拟用户个数
[root@master01 ~]# ] awk '!/bash$/{i=i+1}END{print i}' /etc/passwd
# 查看tcp连接数的情况
netstat -an|awk '/^tcp/{++S[$NF]}END{for (a in S)print a,S[a]}'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值