shell中的grep+sed+awk命令

grep文本过滤命令

  • grep的定义
    Global search regular expression and print out the line 全面搜索研究正则表达式并显示出来 grep命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行 由正则表达式或者字符及基本文本字符所编写的过滤条件

  • grep的格式
    grep 匹配条件 处理文件

例如:
grep root passwd##过滤出passwd中含有root的行
grep ^root passwd ##过滤出passwd中以root开头的行
grep root$ passwd ##过滤出passwd中以root结尾的行
grep -i root passwd ##忽略大小写过滤出passwd中含有root的行
grep -E "root|ROOT" passwd ##过滤出passwd中含有root或ROOT的行
grep -Ei "^root|root$" passwd -v | grep root ##过滤出passwd中除了以root开头和结尾的行
grep root passwd -n2 ##过滤出passwd中root行以及它的上下两行
grep root passwd -A1 ##过滤出passwd中root行以及它的下一行
grep root passwd -B1 ##过滤出passwd中root行以及它的上一行
在这里插入图片描述

  • grep中的正则表达式

^westos
westos$
‘w…s’
‘w…’
‘…s’

  • grep中的字符的匹配次数设定
字符意义
*字符出现0或任意次
>字符出现0-1次
+字符出现1-任意次
{n}字符出现n次
{m,n}字符出现最少m次,最多n次
{0,n}字符出现0-n次
{m,}字符出现至少m次
(xy){n}xy字符出现n次
.*关键字之间匹配任意字符

示例:
grep xy westos ##过滤查看westos文件中的xy
grep x*y westos ##任意个x再跟y
grep x.y westos ##xy中间跟任意一个字符
grep -E x?y westos ##y前跟0-1个x
grep -E x+y westos ##y前跟1-任意个x
grep -E x{1}y westos ##y前有一个x即可,匹配到所有
grep -E "\<x{1}y" westos ##y前有一个x,且在行首
grep -E "x{1}y\>" westos ##y前有一个x,且在行末
grep -E "x{1,}y" westos ##y前的x个数是1-任意
grep -E "(xy){1,}" westos ##xy个数1-任意
在这里插入图片描述
在这里插入图片描述

sed行编译器

用来操作纯ASCII码文本
处理时,会把当前的行储存在临时缓冲区,称为“模式空间”(pattern space)
可以指定处理哪些行sed符合模式条件的处理,不符合条件的不予处理
处理完成之后把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件结尾
  • p模式操作

sed -n '/\:/p' fstab ##显示fstab文件中有符号:的行
sed -n '/UUID$/p' fstab ##显示以UUID结尾的行
sed -n '/^UUID/p' fstab##显示以UUID开头的行
sed -n '2p,6p' fstab ##显示第二行和第六行
sed -n '2,6p' fstab##显示2-6行
sed -n '2,6!p' fstab ##显示除了2-6行的其他行
在这里插入图片描述

在模式空间中:
-n   ##只显示,屏蔽模式空间内的数据
不加-n ##多显示,将选择的内容显示一次,再将文件内容显示一次

示例:
ifconfig eth0 | sed -n '/inet\>/p' ##查看ifconfig eth0中包含inet行的内容
cat -b fstab > westos
sed 5p westos
在这里插入图片描述

  • d模式操作

sed '/^UUID/d' /etc/fstab##不显示以UUID开头的行
sed '/^#/d' /etc/fstab ##不显示以#开头的行
sed '/^$/d' /etc/fstab ##不显示空行
sed '1,4d' /etc/fstab ##不显示1-4行
sed '/^UUID/!d' /etc/fstab ##只显示以UUID开头的行
在这里插入图片描述

  • a模式操作

sed '/^UUID/a \hello sed' /etc/fstab ##在以UUID开头行的下一行添加hello sed
sed '/^UUID/a \hello sed\nwestos' /etc/fstab ##在以UUID开头行的下一行添加hello sed,并换行添加westos
在这里插入图片描述

  • i模式操作

sed '/^UUID/i\hello sed\nwestos' /etc/fstab ##在以UUID开头行的上一行添加hello sed,并换行添加westos
在这里插入图片描述

  • c模式操作

sed '/^UUID/c\hello sed\nwestos' /etc/fstab ##以UUID开头行换成hello sed,并换行添加westos
在这里插入图片描述

  • w模式操作

sed '/^UUID/w /tmp/fstab.txt' /etc/fstab ##将/etc/fstab文件中以UUID开头的行的内容写入/tmp/fstab.txt文件中(fstab.txt文件可以不存在)
sed -n '/^UUID/w /tmp/fstab.txt' /etc/fstab ####将/etc/fstab文件中以UUID开头的行的内容写入/tmp/fstab.txt文件中,不显示模式空间的内容
sed '/^UUID/=' /etc/fstab ##在以UUID开头的行添加行号
sed '6r /etc/issue' /etc/fstab ##将issue添加到fstab的第6行
在这里插入图片描述

  • sed的其他用法

sed -n ‘/^UUID/=’ fstab
sed -n -e ‘/^UUID/p’ -e ‘/^UUID/=’ fstab
sed -e ‘s/brown/green/; s/dog/cat/’ data
sed -f rilesfile file
sed ‘s/^//#/’ /etc/fstab
sed ‘s@^/@#@g’ /etc/fstab
sed ‘s///#/’ /etc/fstab
sed ‘s///#/g/’ /etc/fstab

  • sed的其他用法

sed 'G' passwd ##显示passwd文件,并给每一行后加空行
sed '$!G' passwd ##显示passwd文件,并给每一行后加空行,最后一行不加
sed '=' passwd | sed 'N;s/\n/ /'##sed逐行加载;N表示加载此行时同时加载下一行;s表示全文;\n表示换行符
sed -n '$p' passwd##显示最后一行
在这里插入图片描述
在这里插入图片描述

awk报告生成器

awk处理机制:awk会逐行处理文本,支持在处理第一行之前做做一些准备工作,以及在处理完最后一行做一些总结性质的工作,在命令格式上分别体现如下:
BEGIN{}:读入第一行文本之前执行,一般用来初始化操作
{}:逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令块
 END{}:处理晚最后一行文本之后执行,一般用来输出处理结果
  • awk基本用法

linux上默认使用gawk
awk '{print FILENAME}' passwd##每处理文件passwd中的一行内容就打印一次文件名
awk -F : '{print NF}' passwd ##以:作为分隔符,抓取文件中每行内容的列数
awk -F : '{print NR}' passwd##以:作为分隔符,抓取文件中每行的行号
awk -F : '{print NF,NR}' passwd ##以:作为分隔符,抓取文件中的行数和列数
awk 'BEGIN{print NAME}'passwd ##开头打印字符NAME
awk 'END{print END}' passwd ##结尾打印字符END
awk -F : 'BEGIN{print NAME}{print $1}END{print END}' passwd##以:作为分隔符,开头打印NAME,输出第一列内容,结尾输出END
awk '/bash$' passwd ##抓取以bsah结尾的一行
awk -F : '/bash$/{print $1}' passwd ##以:作为分隔符,抓取以bash结尾的一行并输出第一列
cat -b passwd ##查看passwd文件内容并标明行数
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值