文本处理工具:grep.sed.awk

  1. grep
  2. sed
  3. awk

1.grep

1.grep 常规
egrep = grep -E

2.grep格式

grep root passwd      		 过滤root关键字
grep ^root passwd     		 以root开头
grep root$ passwd     		 以root结尾
grep -i root passwd   		 忽略大小写
grep -E "\<root" passwd      root字符之前不能有字符
grep -E "root\>" passwd 	 root字符之后不能有字符
grep -数字 					 显示过滤行以及上面几行和下面几行
grep -n  					 显示匹配的行所在行号
grep -A 					 显示过滤行以及下面几行
grep -B 					 显示过滤行以及上面几行
grep -v 					 反向过滤

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

3.grep字符数量匹配规则:

^westos 	 以westos开有
westos$ 	 以westos结尾
w....s 	     w开头s结尾中间4个任意字符
.....s 		 s结尾前面5个任意字符
* 			 字符出现0到任意次
? 			 0到1次
+ 			 1到任意次
{n} 		 n次
{m,n} 	     m到n次
{0,n} 		 0-n次
{,n} 		 0-n次
{m,} 		 最少m次
(lee){2}     lee字符串出现2次

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

2.sed

命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件
在这里插入图片描述
在这里插入图片描述
p:

p  显示
sed -n 5p westos 	  显示第五行
sed -n 3,5p westos    显示3到5行
sed -ne "3p;5p westos 显示3和5行
sed -ne 1,5p westos   1-5行
sed -ne '5,$p' westos 5到最后一行
sed -n '/^#/p' fstab  显示以#开头的行

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

d  删除
sed 5d westos 		    删除第五行
sed '/^#/d' fstab       把#开头的行删除
sed '/^UUID/!d' fstab   除了UUID以外的行都删除
sed -e '5,$d' westos    删除第五行到最后一行

在这里插入图片描述
a:

a   添加
sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab

在这里插入图片描述
c:

c  替换
sed -e '/^#/c hello world' fstab 将以#开头的行替换为hello world
sed '5chello world' westos  将第五行替换为hello world

w:

w      把符合的行写到指定文件中

sed '/^UUID/w westofile' westos 把westos中UUID开头的行写入westosfile中

i:

扫描二维码关注公众号,回复: 11439542 查看本文章
i 插入

sed '5ihello westos' westos

r:

r 整合文件

sed '5r haha' westos

sed字符替换:

sed 's/:/###/g' westos
sed 's/:/###/' westos
sed 's/:/###/g' westos
sed '1,5s/:/###/g' westos
sed '1s/:/###/g' westos
sed '1s/:/###/g;5s/:/###/g' westos
sed '/lp/,/shutdown/s/:/###/g' westos
sed 's/\//####/g' westos
sed 's@/@####@g' westos
sed 's@/@####@g' -i westos  把sed处理的内容保存到westos文件中

3.awk

awk -F 分隔符 BEGIN{}{}END{} FileName

NR 			 	 行数
NF				 列数
FILENAME 		 文件名称本身
westos 		 	 变量值
“westos”		 westos字符串 

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

/bash$/     			条件
/条件1|条件2/ 			条件1或者条件2(一个条件)
/条件1/||/条件2/ 		条件1或者条件2(两个条件)
/条件1/&&/条件2/ 		条件1并且条件2

$0 						所有的列
$1 						第一列
$2 						第二列
$3 						第三列

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

/etc/passwd文件的第六列没有home关键字并且以bash结尾的行:
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd

练习:
统计在系统中能su切换的并且家目录不在/home下的用户数量
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46074899/article/details/105122874