sell脚本之-grep文本过滤器 sed行编辑器 awk报告生成器

grep文本过滤器

grep
Global search rgular 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|bash" passwd 搜索含root以及ROOT的项(= egrep "root|bash" passwd)

grep中正则表达式

grep中的位置及范围设定

    .           ###代表任意一个字符
    ^           ##表示以……开头
    $           ##表示以……结尾
    \<  \>      ##表示不做任何拓展
    []          ##匹配中括号内范围的任意字符
    [^]         ##匹配不在括号范围内的任意字符

'r...'   r后面有三个任意字符的匹配项
'..r'    r前面有两个任意字符的匹配项
'r..w'   r后面w前面有两个任意字符的匹配项

grep中的匹配次数设定

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

grep中的常用字符

  -i        ##忽略字母大小写
  -v	    ##条件取反
  -c	    ##统计匹配行数
  -q       	##静默,无任何输出
  -n       	##显示匹配结果所在的行号
  -b       	##显示匹配结果的字符串所在的行号
  -c       	##显示有多少行匹配
  --color 	##将显示的字符用不同颜色标出
  -e    	##一个-e后跟一个正则表达式,指定多个正则表达式
  -w     	##查找一个词
  -m  	    ##最多匹配几个
  -R 	    ##搜索子目录
  -o	    ##只打印匹配内容
  -A 1      ##查找所有匹配行,显示匹配行前一行
  -B 1      ##查找所有匹配行,显示匹配行前一行
  -C 1      ##查找所有匹配行,显示匹配行前一行,后一行
  -E        ##(=egrep)为一个可扩展的正则表达式	

实验

[root@des ~]# cp /etc/passwd /mnt/
[root@des ~]# vim /mnt/passwd
###删除部分内容 
[root@des ~]# cd /mnt/
[root@des mnt]# grep root passwd 
###筛选包含root的项

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

[root@des mnt]# cat /mnt/passwd | grep games -2
###筛选包含game项的行并显示这一行的上两行及下两行
[root@des mnt]# cat /mnt/passwd | grep games -A2
###筛选包含game项的行并显示这一行的上两行
[root@des mnt]# cat /mnt/passwd | grep games -B2
###筛选包含game项的行并显示这一行的下两行

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

[root@des mnt]# grep -E "sh$" /etc/passwd | cut -d : -f 1
###筛选以/etc/passwd中sh结尾的项,并输出以:为分隔符的第一列

在这里插入图片描述

[root@des mnt]# vim test
[root@des mnt]# grep ws test 
ws
###筛选ws
[root@des mnt]# grep w*s test 
westos
###出现任意次w(0-任意),+s
[root@des mnt]# grep w.....s test 
[root@des mnt]# grep w......s test 
wessstos
weeestos
###ws中间有6个字符

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

[root@des mnt]# vim xy
[root@des mnt]# grep xy xy
###显示xy项
[root@des mnt]# grep x*y xy
###显示xy相间项(x出现0-任意次)
[root@des mnt]# grep -E 'x?y' xy
###显示含x或y项
[root@des mnt]# grep -E 'x+y' xy
###显示X出现任意次+y项

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190613214622206.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190613214646177.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L215aHl5eXl5eQ==,size_16,color_FFFFFF,t_70)


[root@des mnt]# grep -E 'x{2}y' xy
###指定两个x+y
[root@des mnt]# grep -E 'x{2,3}y' xy
###指定两或三个x+y
[root@des mnt]# grep -E 'x{2,}y' xy
###指定最少两个x
[root@des mnt]# grep -E 'x{,3}y' xy
###指定至多三个x
[root@des mnt]# grep -E '(xy){,3}' xy
###指定最多三个xy

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190613214711170.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L215aHl5eXl5eQ==,size_16,color_FFFFFF,t_70)

[root@des mnt]# grep ^root passwd 
###筛选指定以root开头
[root@des mnt]# grep root$ passwd 
###筛选指定以root结尾的项

在这里插入图片描述

sed行编辑器

sed 可依照脚本的指令来处理、编辑文本文件。 sed 一次处理一行内容,处理时,把当前的行存储在临时缓冲区,处理完后,输送到屏幕 Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

一般格式: sed [参数] ‘命令’ fileame

常用参数含义:

p 显示

d 删除

a 添加

c 替换

w 写入

i 插入

常用选项

-n  仅显示指定信息
-i  表示更改原文件内容
-b  表示显示时添加行号
-e  表示进行多个动作
-f  指定脚本名称
-h  显示帮助

实验

p模式

[root@des mnt]# cat fstab -n | sed 5p
###加入一个第5行
[root@des mnt]# cat fstab -n | sed -n 5p
###指定输出第5行

在这里插入图片描述

[root@des mnt]# cat fstab -n | sed -n 3,5p
###指定输出第3~5行

在这里插入图片描述

[root@des mnt]# cat fstab -n | sed -n '3p;5p'
###指定输出第三、第五行
cat fstab -n
###显示fstab,并显示行号

在这里插入图片描述

[root@des mnt]# sed -n '/^$/!p' fstab 
###不显示空行
[root@des mnt]# sed -n '/^$/!p' fstab | sed -n '/^#/!p'
###不显示空行同时不显示#开头的行

在这里插入图片描述

按照userfile文件建立用户,反馈列表中以存在用户

[root@des mnt]# seq 1 10

在这里插入图片描述

[root@des mnt]# vim creste_usr.sh 
#!/bin/bash
[ -z "$1" ] && {
        echo "Error!Please input userfile following script"
        exit
}
[ ! -e "$1" ] && {
        echo "$1 is not exit"
        exit
}
Max_Num=`wc -l $1 | cut -d " " -f 1`
for Line_Num in `seq 1 $Max_Num`
do
        USERNAME=`sed -n ${Line_Num}p $1`
        id $USERNAME &> /dev/null && {
                echo $USERNAME is exist!
        } || {
        useradd $USERNAME
        }
done


[root@des mnt]# vim userfile 
[root@des mnt]# sh creste_usr.sh userfile 
[root@des mnt]# cat userfile 

在这里插入图片描述

d模式

[root@des mnt]# sed '/^UUID/d' fstab 
###删除以UUID开头的行
[root@des mnt]# cat fstab 

在这里插入图片描述

[root@des mnt]# sed '/^#/d' fstab 
###删除#开头的行
[root@des mnt]# sed '/^$/d' fstab 
###删除空行
[root@des mnt]# sed '1,4d' fstab 
###删除1到4行
[root@des mnt]# sed '/^UUID/!d' fstab 
###只不删除UUID行

在这里插入图片描述
在这里插入图片描述
a模式

[root@des mnt]# sed '/^UUID/ahello\nwestos' fstab 
###在UUID行后一行加hello,在下一行加westos(\n指换行)

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

[root@des mnt]# sed -n '/^UUID/w file' fstab 
###将UUID行输入到文件file中
[root@des mnt]# cat file

在这里插入图片描述

[root@des mnt]# sed  '$=' fstab 
###显示fstab并在最后显示行号
[root@des mnt]# sed -n '$=' fstab 
###只显示行号
[root@des mnt]# wc -l fstab | cut -d " " -f 1
###同效
[root@des mnt]# sed '6r /mnt/file' fstab 

在这里插入图片描述
c模式

[root@des mnt]# sed "/#/cwestos" -i fstab 
###将fstab中一#开头的行换为westos
[root@des mnt]# cat fstab 

在这里插入图片描述

利用脚本改变http端口

[root@des mnt]# vim http_port.sh
[root@des mnt]# sh http_port.sh 8080

#!/bin/bash
[ -z "$1" ] && {
        echo "Error:please input number following script"
        exit
}
sed "/^Listen/clisten $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd

[root@des mnt]# vim /etc/httpd/conf/httpd.conf

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

awk报告生成器

对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能。在命令行中使用,但更多是作为脚本来使用

变量参数

NR ##输出当前操作的行号
NF ##输出当前字段个数
print ##打印文件内容
FILENAME ##输出文件名
BEGIN{} #读入第一行文本之前执行,一般用来初始化操作
{} #逐行处理,逐行读入文本执行相应的处理,是最常见的编辑指令块
END{} #处理完最后一行文本之后执行,一般用来输出处理结果

实验

awk '{print FILENAME}' passwd
awk -F : '{print $1}' passwd  只显示第一列

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

awk -F : 'BEGIN{print "hello"}{print $1}' passwd 显示第一列并在第一行加入hello

在这里插入图片描述

awk -F : 'BEGIN{n=1}{print $2,n}' passwd 显示第二列并在每一行后加入1

##在这里插入图片描述

awk -F : 'BEGIN{n=1}{print $2,n++}' passwd 显示第二列并随着行数的增加n也不断加一(行数统计)

在这里插入图片描述

awk -F : 'BEGIN{n=1}{print n++,$2}' passwd 将行数统计放在前面

在这里插入图片描述

awk -F : 'BEGIN{n=1}{print n++,$2}END{print "over"}' passwd 统计行数并显示第二列内容并在结尾行输入over

在这里插入图片描述

awk -F : 'BEGIN{n=1}{print n++,$2}END{print NR}' passwd 统计行数并显示第二列内容,在结尾行显示行数

##在这里插入图片描述

awk -F : 'BEGIN{n=1}{print n++,$2}END{print NF}' passwd 统计行数并显示第二列内容,在结尾行显示列数

在这里插入图片描述

awk -F : 'NR==3{print}' passwd 输出第三行的全部内容

在这里插入图片描述

awk -F : 'NR==3{print $1}' passwd 输出第三行第一列的全部内容

在这里插入图片描述

awk -F : 'NR>=3&&NR<=6{print}' passwd 搜索3~6行的内容

在这里插入图片描述

awk -F : 'NR==3||NR==6{print}' passwd 搜索第三行以及第六行的内容
awk -F : '/bash/{print}' passwd 搜索所有含有bash的行

在这里插入图片描述

awk -F : 'BEGIN{a=34;print a+12}'计算34+12

在这里插入图片描述

awk -F : '/^ro/{print$1,$6}' passwd 搜索以ro开头的行并输出它的第一、六行

在这里插入图片描述

awk -F : '/^[a-d]/{print$1,$6}' passwd 搜索以a\b\c\d开头的行并输出它的第一、六行

在这里插入图片描述

awk -F : '/^root|nologin$/{print $1,$7}' passwd 搜索以root开头或nologin结尾的行并输出它的第一、七行

在这里插入图片描述

awk -F : '$6~/bin$/{print $1,$6}' /etc/passwd 搜索第六列以bin结尾的行并输出1、6列

在这里插入图片描述

awk -F : '$6!~/bin$/{print $1,$6}' /etc/passwd搜索第六列不以bin结尾的行并输出1、6>列

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值