Linux系统下shell中的文本处理的正则表达式(grep+sed+awk)

1.GREP(Global search regular expression and print out the line的缩写)

是一种强大的文本搜索工具
它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行
Unix的grep家族包括grep、egrep和fgrep,Windows系统下类似命令FINDSTR

#1)GREP的模式(贪婪模式的匹配)
贪婪模式:只要含有被指定的关键字都会被打印,哪怕搜索的关键字是某字符的一部分

	cp /etc/passwd /mnt
	cd /mnt
	将passwd文件复制到/mnt,在/mnt下进行命令实验

在这里插入图片描述

	vim passwd				用vim编辑器删除一部分内容,留下一部分用于实验
	grep root passwd		搜索全文中的root 

在这里插入图片描述

	grep ^root passwd		搜索全文中以root开头的 

在这里插入图片描述

	grep bash$ passwd		搜索全文中以bash结尾的 

在这里插入图片描述

	grep -i root passwd		忽略大小写 

	grep -E "^root|bash$" passwd		同时匹配多个条件。grep -E = egrep

在这里插入图片描述

#2)grep中的正则表达式

grep 中字符的匹配次数设定

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

例:
vim file
编辑一个测试用的文件
在这里插入图片描述

	grep ab file 			贪婪模式的打印

在这里插入图片描述

	grep a*b file		打印a和b之间含有任意字符的行

在这里插入图片描述

grep -E 'a?b' file		打印b前面出现0-1次a的行

在这里插入图片描述

	grep -E 'a+b' file		打印b前面至少出现一次a的行

在这里插入图片描述

#3)贪婪模式的搜索和避免贪婪模式

	vim file1	编辑实验文件

在这里插入图片描述

	grep -E root file1			贪婪模式下都会被搜索到,哪怕是含有root的其他字符串

在这里插入图片描述

	\<  |  \>		可以阻止贪婪模式
	
	grep -E "\<root" file1

在这里插入图片描述

	grep -E "root\>" file1

在这里插入图片描述

#############################
2.sed行编辑器

SED是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大 sed用来操作纯 ASCII 码的文本 处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) ,可以指定仅仅处理哪些行 sed 符合模式条件的处理,不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕 接着处理下一行 , 这样不断重复 , 直到文件末尾 原来的内容是在磁盘当中放着,现在用sed命令处理的时候将内容掉入内存的一个地方用户处理,这个处理空间也叫模式空间

	调用 sed 命令有两种形式
	sed     [options]       'command' file(s)
	sed     [options]   -f   scriptfile file(s)

sed对字符的处理:
在这里插入图片描述

#1)p 模式

	cp /etc/fstab /mnt	
	vim fstab				为方便实验删除第一行空行,并且手动给其他行数添加行号

在这里插入图片描述

	sed -n '/#/p' fstab					显示带有 # 的行

在这里插入图片描述

	sed -n '/UUID$/p' fstab			显示 UUID结尾的行
	sed -n '/^UUID/p' fstab			显示 UUID 开头的行

在这里插入图片描述

	sed -n '2,6p' fstab			显示 第2-6行

在这里插入图片描述

sed -n '2,6!p' fstab			显示除了第2-6行

在这里插入图片描述

		-n 		表示屏蔽 模式空间的显示

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

#2)d模式

	sed   '/^UUID/d' fstab			除了以UUID开头的都显示

在这里插入图片描述

	sed   '/^#/d' fstab		除了以# 开头的都显示

在这里插入图片描述

	sed   '1,4d'fstab			除了1-4行都显示

在这里插入图片描述

	sed   '/^UUID/!d' fstab			不显示 除了以UUID开头的

在这里插入图片描述

#3)a模式

	sed '/^UUID/ahello westos' fstab		在以UUID开头的行下面添加内容hello westos

在这里插入图片描述

	sed '/^UUID/ahello\nwestos fstab'			
	在以UUID开头的行下添加内容第一行hello第二行westos

在这里插入图片描述

#4) i 插入

			sed '/^UUID/ihellowestos fstab'	
			在以UUID开头的行上面插入内容hellowestos

在这里插入图片描述

			sed '/^UUID/ihello\nwestos fstab'
			在以UUID开头的行上面插入内容第一行hello第二行westos		

在这里插入图片描述

#5) c 模式

		sed '/^#/chello westos' fstab			
		将以#开头的行全部替换为hellowestos  		

在这里插入图片描述
#6)w模式

		vim file

在这里插入图片描述

		sed '/^UUID/w file fstab 	将以UUID开头的行写入 fstab
		sed -n '/^UUID/w file fstab

在这里插入图片描述

			sed '/^UUID/=' fstab		显示原文并显示以UUID开头行的行号

在这里插入图片描述

		sed  '6r file1' fstab		将文件file1的内容添加到fstab的第六行下

在这里插入图片描述

#7)sed的其他用法

		sed -n '/^UUID/=' fstab			显示以UUID开头的行是第几行

在这里插入图片描述

		vim rulesfile
		屏蔽以UUID开头的行并替换以#开头的行 为westos
		sed -f rulesfile fstab

在这里插入图片描述

		sed 's/^#/\//g'fstab		将所有#替换为/

在这里插入图片描述

		sed 'G' fstab		在显示的内容中每一行都添加一行空格
		sed  '$!G' data
		sed  '=' data | sed 'N; s/\n/ /'
		sed -n '$p' data

在这里插入图片描述

##################################
3.awk

awk处理机制:awk会逐行处理文本,支持在处理第一行之前做一些准备工作,以及在处理完最后一行做一些总结性质的工作,然后将结果展现给用户.

awk的使用:

			cp /etc/passwd /mnt
			cd /mnt
			vim passwd			删除一部分剩下的实验awk命令

在这里插入图片描述

		awk -F : '{print $1}' passwd				
		打印passwd文件,指定以:为分隔符的第一列字符

在这里插入图片描述

	awk -F : '{print $1,$2}' passwd  打印第一列和第二列

在这里插入图片描述

		awk -F : 'BEGIN{print "westos"}{print $1}' passwd 
		打印第1列,并且在最前面加上westos

在这里插入图片描述

	awk -F : 'BEGIN{n=1}{print $2,n++}' passwd打印第二列,并且编号
	$num 和 n++ 的先后输入顺序就是显示的顺序

在这里插入图片描述

	awk -F : 'BEGIN{n=1}{print n++,$1}END{print “over”}'  passwd
	打印第一列,并作编号,在最后面写上over

在这里插入图片描述

		awk -F : '/bash/{print$1}' passwd   输出包含bash的行的第一列

在这里插入图片描述

	awk '/^[a-d]/{print}' passwd 		 输出以a到d开头的行

在这里插入图片描述

	awk '/^[^a-d]/{print}' passwd  输出不是以a到d开头的所有的行

在这里插入图片描述

	awk '/^r|bash$/{print}' passwd  输出以r开头或者以bash结尾的行

在这里插入图片描述

	awk -F : '$6~/bin$/{print}' passwd 打印第六列以bin结尾的行

在这里插入图片描述

	  ifconfig eth0 | awk '/inet\>/{print $2}'		使用一条命令只显示当前主机ip

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值