shell-grep、sed、awk命令

  • grep

grep文本过滤命令=Global search regular expression and print out the line 全面搜索研究正则表达式并显示出来

grep 		匹配条件			处理文件
grep 		root    		passwd		搜索root
grep 		^root   		passwd		搜索root开头
grep 		root$   		passwd		搜索root结尾
grep 	-i	 root 			passwd		搜索root不管大小写
grep 	-E "root|ROOT" 		passwd		搜索root和ROOT(-E 可以识别|)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

grep -Ei “root” passwd 抓取root不分大小写

在这里插入图片描述

grep -Ei “root$” passwd 抓取root结尾不分大小写

grep -Ei “^root” passwd 抓取root开头不分大小写

在这里插入图片描述

grep -Ei “^root|root$” passwd 抓取root开头或root结尾不分大小写

在这里插入图片描述

grep -Ei “^root|root$” passwd -v 除过root开头和结尾的

在这里插入图片描述

grep -Ei “^root|root$” passwd -v | grep root 除过root开头和结尾的 包含root的

在这里插入图片描述

grep -Ei “^root|root$” passwd -v | grep root -n 除过root开头和结尾的 包含root的, 输出行号

在这里插入图片描述

grep ROOT passwd -n 显示行号

在这里插入图片描述

grep ROOT passwd -2 显示前后两行

在这里插入图片描述

grep ROOT passwd -A1 显示后面一行

grep ROOT passwd -B1 显示前面一行

在这里插入图片描述
grep中的正则表达式

grep ^westos
grep westos$
grep 'w...s' file	grep x...y file			搜索xy中间有三个字符的
grep 'w...' file	grep x... file			搜索x后有三个字符的
grep '...s' file	grep ...y file			搜索y前有三个字符的

在这里插入图片描述
grep中字符的匹配次数设定

\*				字符出现[0-任意次]
\?  			字符出现[0-1次]
\+				字符出现[1-任意次]
\{n\}			字符出现[n次]
\{m,n\}			字符出现[至少m次,最多出现n次]
\{0,n\}			字符出现[0-n次]
\{m,\}			字符出现[至少m次]
\(xy\)\{n}xy	关键字出现[n次]
.*				关键字之间匹配任意字符

grep中字符的匹配位置设定

^关键字
关键字$
\<关键字
关键字\>
\<关键字\>

grep x*y emp x出现0-任意次,+y

grep x.y emp xy中间跟一个字符

在这里插入图片描述

grep -E x?y emp y前紧跟0-1个x

grep -E x+y emp y前紧跟1到任意个x

在这里插入图片描述

grep -E x{1}y emp y前有一个x

grep -E “<x{1}y” emp y前有一个x,且在行首

grep -E “x{1}y>” emp y前有一个x,且在行末

grep -E “<x{2}y>” emp 一行只有,y前有二个x

在这里插入图片描述

grep -E “x{1,}y” emp y前有1到任意个x

grep -E “(xy){1,}” emp xy个数1到任意

在这里插入图片描述

  • sed

sed 行编辑器=stream editor

sed -n ‘/:/p’ fstab 显示含有:行

sed -n ‘/4$/p’ fstab 显示4结尾行

sed -n ‘/^UUID/p’ fstab 显示UUID开头行

在这里插入图片描述

sed -n ‘2,6p’ fstab 显示2-6行

sed -n ‘2,6!p’ fstab 不显示2-6行

sed -n ‘2p;6p’ fstab 显示2行和6行

在这里插入图片描述
-n 只显示,屏蔽模式空间内的数据
不加-n 多显示,将选择的内容显示一次,再将文件内容显示一次,相当于选择内容显示两次

sed ‘/^#/d’ fstab 不显示#开头行

sed ‘/4$/d’ fstab 不显示4结尾行

在这里插入图片描述

sed ‘1,4d’ fstab 不显示1-4行

sed ‘1d;4d’ fstab 不显示14行

sed ‘/^UUID/!d’ fstab 显示UUID开头行

在这里插入图片描述
a 添加

sed ‘/^UUID/ahello world’ fstab UUID开头行之后添加hello world

sed ‘/^UUID/ahello\nworld’ fstab UUID开头行之后添加hello和world行

在这里插入图片描述
i 插入

sed ‘/^UUID/ihello world’ fstab UUID开头行之前插入hello world

sed ‘/^UUID/ihello\nworld’ fstab UUID开头行之前插入hello和world行

在这里插入图片描述
c 改变

sed ‘/^UUID/chello world’ fstab UUID开头行替换为hello world

在这里插入图片描述
w 写入

sed ‘/^UUID/w /mnt/westosfile123’ fstab UUID开头行写入到westosfile123 显示

在这里插入图片描述

sed -n ‘/^UUID/w /mnt/westosfile456’ fstab UUID开头行写入到westosfile456 不显示

在这里插入图片描述

= 行号

sed ‘/^#/=’ fstab 以#开头行加入行号

在这里插入图片描述

sed ‘/^#/=’ -i fstab 以#开头行加入行号输入到fstab文件

在这里插入图片描述

sed '/^[0-9]/d' -i fstab 以数字开头行不显示输入到fstab文件(还原上一步骤文件)

在这里插入图片描述

sed ‘4r /mnt/test’ fstab 将test文件加入到fstab第四行之后

在这里插入图片描述

sed -n ‘/^#/=’ fstab 以#开头的行加入行号,不显示

在这里插入图片描述

sed -n -e '/^UUID/=' -e '/^#/=' fstab	执行第一个和第二个,不显示 -->sed -n '/^UUID/=;/^#/=' fstab

在这里插入图片描述

sed -e '/^UUID/=' -e '/^#/=' fstab	执行第一个和第二个 显示  -->sed  '/^UUID/=;/^#/=' fstab

在这里插入图片描述

sed ‘/^#/=’ fstab > file1 以#开头的行加行号导入到法file1文件(必须存在),不改变fstab文件内容

在这里插入图片描述

sed ‘/^#/=’ -i fstab 给fstab文件中以#开头的行加行号

在这里插入图片描述
加行号不能使用/w写入文件

> 不更改本身内容
-i 可更改本身内容

vim rule

/^UUID/d			以UUID开头的不显示
/^#/cwestos			以#开头的替换为westos

sed -f rule fstab 对于fstab执行rule规则

在这里插入图片描述

sed ‘s/^//#/g’ /etc/fstab 将/etc/fstab全文以/做为开头的/替换为#

在这里插入图片描述

sed ‘s@^/@#@g’ /etc/fstab 将/etc/fstab全文以/做为开头的/替换为#

在这里插入图片描述

sed ‘s///#/g’ /etc/fstab 将/etc/fstab全文的/替换为#

在这里插入图片描述

sed ‘1,4s/#//g’ /etc/fstab 将/etc/fstab中1-4行的#全部替换成空

在这里插入图片描述

sed ‘s/sbin/westos/g;s/nologin/lee/g’ passwd

在这里插入图片描述

sed ‘/lpeeeeep/,/sbiiiiin/s/?@/g;’ passwd 将lpeeeeep到sbiiiiin的:替换为@

在这里插入图片描述

sed ‘/lpeeeeep/,/sbiiiiin/s/?#/g;10,12s/?%/g’ passwd 将lpeeeeep到sbiiiiin的:替换为@,将10-12行:替换为%

在这里插入图片描述

sed ‘G’ passwd 显示passwd文件每一行后边加一个空行

在这里插入图片描述

sed ‘$!G’ passwd 显示每一行后边加一个空行,最后一行不加

在这里插入图片描述

sed ‘=’ passwd 显示行号在每一行的上一行

在这里插入图片描述

sed ‘=’ passwd | sed ‘N;s/\n//g’ #sed逐行加载,加N;表示加载此行时同时下一行,\n表示换行符

sed ‘=’ passwd | sed ‘N;s/\n/ /g’

在这里插入图片描述

sed -n ‘$P’ fstab 显示最后一行,与tail -n 1意思相同

在这里插入图片描述

  • awk 报告生成器

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

awk ‘{print FILENAME}’ passwd 处理文件passwd中每一行内容就打印一次文件名,有多少行就会显示多少行文件名

在这里插入图片描述

awk -F : ‘{print NF}’ passwd 以 : 做为分隔符,打印文件中每行内容的列数

在这里插入图片描述

awk ‘{print NR}’ passwd 打印passwd文件每行的行号

在这里插入图片描述

awk -F : ‘{print NF,NR}’ passwd 打印passwd文件行数和列数

在这里插入图片描述

awk ‘BEGIN{print “NAME”}’ passwd 开头打印字符NAME

awk ‘BEGIN{print “NAME”}{print NR}’ passwd 开头打印字符NAME,每行的行号

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print NF}END{print"END"}’ passwd 以 :做为分隔符,开头输出NAME,输出列数,结尾打印字符END

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $1}END{print"END"}’ passwd 以 : 做为分隔符,开头输出NAME,输出第一列内容,末尾输出END

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $1,$7}END{print"END"}’ passwd 以: 做为分隔符,开头输出NAME,输出1、7列内容,末尾输出END

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $1$7}END{print"END"}’ passwd 以 :做为分隔符,开头输出NAME,输出1、7列内容,不区分,末尾输出END

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $0}END{print"END"}’ passwd 以 : 做为分隔符,开头输出NAME,输出全部内容,末尾输出END

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print"END"}’ passwd 将第一列置为空输出全部

在这里插入图片描述

awk -F : ‘BEGIN{print “NAME”}{print $1="";print $0}END{print"END"}’ passwd | sed 's/ /:/g’将第一列置为空输出全部,替换空为:

在这里插入图片描述

awk -F : ‘BEGIN{n=1}{print $2,n}’ passwd 打印第二列和n(n=1)

在这里插入图片描述

awk -F : ‘BEGIN{n=1}{print $2,n++}’ passwd 打印第二列和n(n自加1)

在这里插入图片描述

awk -F : ‘BEGIN{n=0}/bash$/{n++}END{print n}’ passwd 打印以bash结尾多少行

在这里插入图片描述

awk -F : ‘BEGIN{n=1}{print n++,$1}END{print NR}’ passwd 以 : 做为分隔符,打印n(n自加1)和第一列,末尾打印行数

在这里插入图片描述

awk ‘BEGIN{a=12;print a+13}’ passwd 打印a=12,a+13的结果

在这里插入图片描述

awk ‘/bash/{print}’ passwd 抓取有bash的行

awk -F : ‘/bash/{print $1}’ passwd 以 : 做为分隔符,抓取有bash的行并输出第一列

在这里插入图片描述

awk ‘!/bash$/{print}’ passwd 抓取不以bash结尾的行

在这里插入图片描述

awk ‘/^root/{print}’ passwd 抓取以root开头的行

awk ‘/bash$/{print}’ passwd 抓取以bash结尾的行

awk ‘/^bin|bash$/{print}’ passwd 抓取以bin开头或者以bash结尾的行

在这里插入图片描述

awk ‘/^root/&&/bash$/{print}’ passwd 抓取以root开头且以bash结尾的行

在这里插入图片描述

awk ‘!/^root/&&!/bash$/{print}’ passwd 抓取不以root开头且不以bash结尾的行

在这里插入图片描述

awk 'NR==3{print}' passwd					打印第三行

awk 'NR>=4&&NR<=6{print}' passwd			打印4-6行

awk 'NR==4||NR==6{print}' passwd			打印4、6行

在这里插入图片描述

awk '/^[a-d]/{print}' passwd				抓取以a-d开头的行
awk '/^[^a-d]/{print}' passwd				抓取不以a-d开头的行

在这里插入图片描述

awk -F : '$2~/root$/{print}' passwd			抓取第二列以root结尾的行

awk -F : '$6!~/root$/{print}' passwd			抓取第六列不以root结尾的行

在这里插入图片描述

awk -F : ‘$6~/bin/{print}’ passwd 抓取第六列含有bin的行

在这里插入图片描述

awk -F : ‘$6~/<bin/{print}’ passwd 抓取第六列为bin,bin前无字符的行

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值