Linux--Shell文本处理工具(grep,sed,awk)

1.grep全局搜索正则表达式

1.1 grep的格式

grep 匹配条件 处理文本
grep root filename 按指定信息匹配内容
grep ^root firename 找到文件中以root开头的行
grep root$ filename 找到文件中以root结尾的行
grep \<关键字 处理文本
grep 关键字\> 处理文本
grep \<关键字\> 处理文本

grep 参数
-a 将二进制文件以文本文件的格式去搜索
-c 记录找到搜索目标的次数
-i 忽略大小写的不同
-n 输出行号
-v 反向选择;不输出目标
-E 同时搜寻多条字符,用到扩展正则表达式时

sed -n "$=" /etc/rsyslog.conf
只显示文件一共有多少行

grep RULES /etc/rsyslog.conf -A `sed -n "$=" /etc/rsyslog.conf`
-A num 显示后面的num行
#显示该文件中匹配到的RULES后面的所有行

grep RULES /etc/rsyslog.conf -A `sed -n "$=" /etc/rsyslog.conf` | awk ‘!/^#/&&!/^$/{print $2}’ | sed ‘/^:/d;s/-//g’
/^$/ 以空格开头的行
/^:/d 删除以:开头的行
s/-//g 全局搜索-换为空

grep -nvE “root|student” /etc/passwd
在这里插入图片描述

grep -E “^root|bash$” passwd
匹配passwd文件中以root开头,或者bash结尾的
grep ^root passwd | grep bash$
匹配passwd文件中以root开头并且以bash结尾的

反选
在这里插入图片描述

1.2 grep字符的匹配次数设定

* 字符出现0-任意次
\? 字符出现0-1次
\+ 字符出现1-任意次
\{n\} 字符出现n次
\{m,n\} 至少m次,最多n次
\{0,n\} 字符出现0-n次
\{m,\} 字符出现至少m次
xy\{n\}xy **关键字**出现n次

.* 关键字之间匹配任意字符

分别为匹配 root 后面的字符 t 出现任意次,0-1次,1-任意次。(贪婪模式匹配)
在这里插入图片描述
分别为:
匹配关键字 root 出现任意次,0-1次,1-任意次。(贪婪模式匹配)
在这里插入图片描述
分别为:
匹配 root 关键字 出现 2次,0-2次,至少2次,1-3次。(贪婪模式匹配)
在这里插入图片描述
分别为匹配 root 后面的字符 t 出现1-3次;匹配 root 关键字出现1-3次(贪婪模式匹配);
加-E 可以使用扩展正则表达式,不需要使用转义字符。
在这里插入图片描述
分别为:
匹配root开头和结尾的文本
匹配root开头的文本
匹配root结尾的文本
在这里插入图片描述

2.sed

sed(stream editor)行编辑器

用来操作纯ASCII码的文本,处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,可以指定仅仅处理哪些行;经过处理的文件都是在内存中,并没有将修改保存到源文件中。
sed符合模式条件的处理,不符合条件的不处理,处理完成之后,把缓冲区的内容送往屏幕,接着处理下一行,直到文件末尾。

sed命令调用方式:
sed 【options】 command file
sed 【options】 -f scriptfile file

sed 对字符的处理

p 显示
d 删除
a 添加
c 替换
w 写入
i 插入

P模式操作

sed -n ‘/\:/p’ fstab
sed -n '/UUID$/p' fstab
sed -n '/^UUID/p' fstab
sed -n '2,6p' fstab 打印2-6行
sed -n '2,6!p' fstab 打印不是2-6行的行

在这里插入图片描述
a 模式操作

sed ‘/^UUID/ahello’ fstab 以UUID开头的行下面添加一行hello

在这里插入图片描述
d 模式操作

sed ‘/^UUID/d’ fstab 
删除fstab文件中以UUID开始的行
sed ‘1,4d’ fstab
删除1-4行
sed ‘1,4!d’ fstab
删除不是1-4行

w模式操作

把以UUID开始的行保存到/mnt/sedfile中
sed ‘/^UUID/w /mnt/sedfile’ fstab

sed '6r /mnt/sedfile' fstab
第六行写/mnt/sedfile文件的内容

sed ‘2,4w /mnt/sedfile’ fstab
2-4行写到文件/mnt/sedfile文件中

c模式操作

sed ‘/^#/chaha’ /etc/fstab

在这里插入图片描述
将匹配到的符合的行整行进行替换。
-i 将修改保存到源文件
在模式空间进行操作,修改的是内存缓冲区中的副本,加-i参数将修改保存到源文件。

其他用法:

  • 以UUID开头的行加上行号
    在这里插入图片描述
  • G 添加空行
    在这里插入图片描述
    在这里插入图片描述

3.awk报告生成器

awk处理机制:awk逐行处理文本,支持在处理第一行之前做一些准备性工作,以及在处理完之后做一些总结性工作。
BEGIN{}:读入第一行文本前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行响应的处理
END{}:处理完最后一行文本后执行,一般用来输出处理后的结果。

awk基本用法:

awk ‘{print }’ filename
awk 'BEGIN{a=0}{a++}END{print a}' filename
awk -F :'/^ro/{print}' /etc/passwd

awk '^[a-d]/{print}' /etc/passwd 打印以字母a-d开头的所有行
awk '^[^a-d]/{print}' /etc/passwd 打印不是以字母a-d开头的所有行
awk -F : '$6~/bin$/{print}' /etc/passwd 打印第六列以bin结尾的所有行
awk -F : '$6!~/bin$/{print}' /etc/passwd 打印第六列不是以bin结尾的所有行

awk -F : '$6~/bin$/{print}' /etc/passwd
awk -F : '$6~/\<bin$/{print}' /etc/passwd 防止贪婪模式

awk -F : 'BEGIN{n=1}{print n++,$1}' /etc/passwd 打印第一列的同时打印行号

awk通过 print 的功能将字段数据列出来

awk -F : '{print NR "" NF "" $1 }' passwd
      -F   分隔符类型,默认为空格
      NR   第几行
      NF 有几列
      $1  以“:”为分隔符的第一列数据

在这里插入图片描述

 awk -F : 'BEGIN{print "NAME"}{print $1}END{print "END"}' passwd
      # BEGIN {print "NAME"} 处理数据前,执行显示"NAME"字符
      # END {print "END"} 处理数据后,执行显示"END"字符

在这里插入图片描述

统计一个文件有多少行

 awk 'BEGIN{N=0}{N++}END{print N}' /etc/passwd

在这里插入图片描述
对指定行与内容进行显示

 awk -F : '/^ro/{print}' passwd
     # 以:为分隔符,显示以 ro 字符开头的行
 awk -F : '/^[a-d]/{print $1,$6}' passwd
     # 显示以字母 a-d 开头的行的第 1 列,第 6 列
 awk -F : '/^a|nologin$/{print $1,$7}' passwd
     # 显示以 a 开头,以 nologin 结尾的行的第 1 列,第 7 列
 awk -F : '$6~/bin$/{print $1,$6}' passwd
     # 显示从第 6 列开始,以 bin 结尾的列所在行的第 1 列,第 6 列 
 awk -F : '$7!~/nologin$/{print $1,$6}' passwd
     # 显示除了从第 7 列开始以 nologin 结尾的行的第 1 列,第 6 列
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值