shell——4.2文本处理工具

目录

一.grep :

二.sed :

三.awk

测试 :

一.grep :

grep          ##支持基本正则表达式
        
egrep        ##基础和扩展的正则表达式都支持

egrep = grep -E

	
-E		##搜索含有rot和nologin的行   grep -E "root|nologin"  passwd
-e		##搜索含有rot和nologin的行   grep -e root  -e nologin  passwd
-i		##忽略大小写	grep -i root passwd
-E\<		##被搜索字符前不能有字符	grep -E "\<root" passwd
-E\>		##被搜索字符后不能有字符	grep -E "root\>" passwd	
-n		##显示搜索字符所在的行号和内容	grep -n halt passwd
-5		##显示搜索字符所在的内容一起前5行和后5行	grep -5 halt passwd
-B5		##显示含有关键字的行及上5行		grep -B5 halt passwd		

-A5		##显示含有关键字的行及下5行		grep -A5 halt passwd 
-v		##反向过滤			grep root passwd -v

^root		##以root开头的		grep ^root passwd
root$		##以root结尾的		grep root$ passwd
w....s		##以w开头s结尾中间四个任意字符	grep w....s westos
.....s		##s结尾前面五个任意字符
*		##字符出现任意
?		##0到1次        grep -E "wa?s" westos
+		##1次到任意次    grep -E "wa+s" westos
{n}		##n次           grep -E "wa{1,}s" westos
{m,n}		##m到n次        grep -E "wa{1,2}s" westos
{0,n}		##0-n次
{,n}		##0-n次        grep -E "wa{,2}s" westos
{m,}		最少m次			grep -E "wa{1,}s" westos
(ab){2}	        ##ab字符串出现两次	grep -E "w(ab){2,}s" westos

 

 

二.sed :

sed 's/nologin/westos/g' passwd        ##把passwd文件中的nologin全换成westos  
或者    vim rule
                s/nologin/westos/g
          sed -f rule passwd        ##等同sed 's/nologin/westos/g' passwd   

p                        ##显示
sed 5p passwd            ##打印第五行
sed -n 5p passwd        ##不输出模式空间内的内容只输出被处理的内容
cat -b passwd | sed -n 3,5p    ##三到五行
cat -b passwd | sed -n '3p;5p'    ##三和五行
sed -n '/^root/p' passwd    ##root开头的行
sed -n '/bash$/p' passwd    ##bash结尾的行
sed -n '5,$p' passwd        ##第五行到最后一行
sed -n '$p' passwd        ##最后一行

 

 

     d                        ##删除
    sed 5d passwd            ##删除第五行
    sed '/^#d' passwd        ##把#开头的行删除
    sed '/^UUID/!d' passwd        ##除了UUID开头的行都删除

    a                       ##添加,在下面
    sed '$aleeleelee' westos                    ##在最下面一行添加leeleelee
    sed '$aleeleelee\nwestoswestos' westos    ##在最下面添加leelee和westoswestos
    sed '/hello/aleeleelee' westos            ##在hello下面添加leeleelee
    sed '2aleeleelee' westos                    ##在第二行下面添加leeleelee

    c        ##替换
    sed '1chahaha' westos        ##将第一行内容变为haha
    sed '/linux/chaha' westos    ##将linux变为哈哈

 

     w        #将符合条件的行写入指定的文件中
     sed '/nologin$/wwestosfile' passwd    ##将符合条件的行写入到westosfile文件中

     i
    sed '/westos/iwestoslinux' westos    ##将westoslinux插入到内容westos之上

 

     r    整合文件
    sed '2r lee' westos          ##将lee文件中内容插入到westos文件中的第二行之下
    sed '/hello/rlee' westos    ##将lee文件中的内容插入整合到westos中/hello行下

 

     sed 字符替换
    sed 's/a/b/g' test        ##把test文件中的所有列a替换成b
    sed 's/a/b/' test          ##没加g表示默认将第一列的a替换成b
    sed 's/sbin/westos/g' passwd     ##把全文的sbin替换成westos    
    sed '4,5s/sbin/westos/g' passwd    ##把4-5行的sbin替换成westos
    sed '$s/sbin/westos/g' passwd    ##把最后一行的sbin替换成westos
    sed '/lp/,/halt/s/sbin/westos/g' passwd    ##把lp和halt字符之间的sbin替换成westos
    sed 's/\//####/g' passwd    ##把全文的/替换成####
    sed 's@/@####@g' passwd        ##把全文的/替换成####
    sed 's@/@####@g' -i passwd    ##把替换的内容保存到原文见中

 

 

 三.awk

awk -F 分割符号 BEGIN{}{}END{} FILENAME

    awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' passwd
    ##BEGIN表示运行处理策略之前做的动作
    ##"name"字符串不加引号表示变量,加引号表示字符串本身
    ##{print $1}处理动作
    ##end处理结束所作的事情

    NR行数,NF列数
    awk -F : '{print NR}' passwd    ##行数
    awk -F : '{print NF}' passwd    ##列数 

 

     awk -F : '{print FILENAME}' passwd    ##FILENAME 要处理的文件名称

 

     awk -F : 'BEGIN{westos=1}{westos++}END{print westos}' passwd    
    ##westos=1   设定westos=1
    ##westos++   每处理一行westos自动加1
    ##print westos      处理所有行之后打印westos的值

    awk -F : '/nologin$/{print $1,$7}' passwd        ##显示所有以nonogin结尾的行中的第一列和第七列

    awk -F : '/nologin$|^root/{print $1,$7}' passwd        ##条件中两个元素或关系,nologin结尾或root开头的行中的第一列和第七列

    awk -F : '/nologin$/||/^root/{print $1,$7}' passwd    ##两个条件或关系
    
    awk -F : '/bash$/&&/^root/{print $1,$7}' passwd        ##两个条件并且关系

    awk -F : '/bash$/&&/^root/{print $0}' passwd        ##以bash结尾并且以root开头所有的列

    awk -F : '/bash$/&&/^root/{print $1}' passwd        ##以bash结尾并且以root开头的第一列
    
    awk -F : '/bash$/&&/^root/{print $2}' passwd        ##以bash结尾并且以root开头的第二列

    awk -F : '$7~/bash$/{print $0}' passwd            ##第七列是以bash结尾的所有列

    awk -F : '$7!~/bash$/{print $0}' passwd            ##第七列不是以bash结尾的所有列

测试 :

1. 统计在系统中能su切换的并且用户家目录不再home下的用户数量

2.awk一条命令抓取ens3网卡的ip

3.练习脚本,Apache_port.sh,此脚本接入数字,http的端口就改为此数字,假设selinux状态关闭,例如:

sh Apache_port.sh
ERROR: Pleaase input port number following script !!

sh Apache_port.sh 8080
apache的端口会被修改为8080

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值