3.2 文本处理工具

1. grep

命令
grep root file 过滤root关键字
grep ^root file 过滤以root开头的关键字
grep root$ file 过滤以root结尾的关键字
grep -i root file 忽略大小写
grep -E “<root” file root字符之前不能有字符
grep -E “root>” file root字符之后不能有字符
grep -数字 显示过滤行以及其上面和下面的几行
grep -n 显示匹配的行所在行号
grep -A 显示过滤行以及下面的几行
grep -B 显示过滤行以及上面的几行
grep -v 反向过滤
grep字符数量匹配规则 说明
^westos 以westos开头
westos$ 以westos结尾
w…s w开头到s结尾中间4个任意字符
…s s结尾前面5个任意字符
* 字符出现任意次
? 0到1次
+ 1次到任意次
{n} n次
{m,n} m到n次
{0,n} 0到n次
{,n} 0到n次
{m,} 最少m次
(lee){2} lee字符串出现2次

2. sed

3. awk

awk -F 分割符 BEGIN{}{}END{} filename

NR					//行数
NF 					//列数
FILENAME 			//文件名称本身
linux				//变量名
"linux"				//字符串
( “”字符串,不加“”就是变量)
/bash$/ 条件
/条件1|条件2/		//条件1或者条件2
/条件1||条件2/		//条件1或者条件2
/条件1/&&/条件2/		//条件1并且条件2
$0					//所有列
$1 					//第一列
cp /etc/passwd .
cat passwd			//删除了部分内容
awk -F : '{print $1}' passwd		//打印第一列的数据
awk -F : '{print $2}' passwd		//打印第二列的数据
awk -F : '{print $1$2}' passwd		//打印第一列和第二列的数据
awk -F : '{print $1" "$2}' passwd	//打印第一列和第二列数据时中间有分割符为空格
awk -F : 'BEGIN{print "userlist:"}{print $1}END{print "end"}' passwd			//打印第一列的数据,以userlist字符串开始,以end字符串结尾
awk -F : '{print NR}' passwd		//打印行数
awk -F : '{print FILENAME}' passwd	//打印文件的名字
awk -F : 'BEGIN{linux=0}{print linux}' passwd	//打印linux变量的数值
awk -F : 'BEGIN{linux=0}{print "linux"}' passwd
awk -F : '{print "linux"} passwd				//打印linux字符串
awk -F : '/bash$/{print $1}' passwd			//打印以bash结尾的用户(第一列的数据)
awk -F : '/bash$/&&/^root/{print $1}' passwd	//打印以bash结尾,并且以root开头的字符(第一列)
awk -F : '/bash$/||/^root/{print $1}' passwd	//打印以bash结尾,或者以root开头的字符(第一列)
awk -F : '/bash$/||/root/{print $1}' passwd	//打印以bash结尾,或者含有root的字符(第一列)
awk -F : '/bash$|root/{print $1}' passwd		//打印以bash结尾,或者含有root的字符(第一列)
awk -F : '/bash$&&root/{print $1}' passwd		//错误打印
awk -F : '$7~/\/bin\/bash/{print $1}' passwd	//打印第7列含有/bin/bash的第一列字符
awk -F : '$7!~/\/bin\/bash/{print $1}' passwd	//打印第7列不含有/bin/bash的第一列字符
awk -F : ‘/root/{print $1}' passwd				//打印每行含有root关键字的第一列

3.1 测试

测试1:
打印出passwd的总行数和最后一行用户使用的shell的名称

[root@westos_node1 Desktop]# awk -F : 'END{print NR;$NF}' /etc/passwd

测试2:
统计在系统中能su切换的并且用户家目录不在/home下的用户数量

[root@westos_node1 Desktop]# awk -F : 'BEGIN{N=0}/bash$|sh$/&&$6!~/^\/home/{N++}END{print N}' /etc/passwd
1

测试3:
打印出ip地址

[root@westos_node1 Desktop]# ifconfig ens3 | awk '/inet\>/{print $2}'
172.25.254.123

猜你喜欢

转载自blog.csdn.net/weixin_47133613/article/details/114680652