4.2--文本处理工具

#grep命令

命令格式: grep  匹配条件  处理文件

 

grep root passwd 过滤passwd文件中的root关键字,只有小写

grep -i root passwd -i忽略大小写,此时大写ROOT也会被过滤出来

grep -E "\<root" passwd root字符之前不能有字符

grep -E "root\>" passwd root字符之后不能有字符

-v参数,反向过滤,即过滤出没有root的

-n,显示过滤行的行号以及内容,-n -3则为显示过滤行和上三行和下三行内容,-n -A3则只显示上三行,-n -B3则只显示下三行。

grep字符数量匹配规则

grep ^westos file 过滤file文件中以westos开头

westos$ 以westos结尾

w....s 以w开头s结尾,中间四个任意字符,几个点就是几个任意字符。

*  为字符出现任意多次,如grep -E "w.*s" file 过滤file文件中以w开头s结尾中间任意个字符

? 为0到1次,如"we?s"为w开头,s结尾,中间e只能为0个或1个。

+  为1到多次,与*区别是*包括0次,+至少为1。

{n}n次

{m,n}    m到n次

{0,n}    0到n次,或{,n}

{m,}     最少m次,m到多次

(lee){2}    lee字符串出现两次

练习:显示系统中能被su命令切换的用户名称

grep -E "\<bash$|\<sh$" /etc/passwd | cut -d : -f 1

#sed命令

命令格式:sed  参数  命令  处理对象

                  sed   参数   处理对象  -f  处理规则文件

sed 's/nologin/westos/g'  passwd  把passwd中所有nologin换成westos;或者vim rules,把规则写入文件中s/nologin/westos/g,然后sed  -f  rules  passwd 。

对字符的处理

p  显示

sed 5p passwd 把passwd文件的第五行多显示一次

sed -n 5p passwd 只显示第五行

sed -n 3,5p passwd 只显示第三行到第五行

sed -ne "3p;5p" passwd 只显示第三行和第五行

sed -ne '/^r/p' passwd 只显示以r开头的行

sed -ne '/bash$/p' passwd 只显示以bash结尾的行

sed -ne '/bash$/!p' passwd 只显示不以bash结尾的行

sed -ne '$p' passwd 只显示最后一行

d  删除

sed 5d passwd 删除第五行

sed  '3,5d' passwd 删除第三行到第五行

sed -e '3p;5d' passwd 删除第三行和第五行

sed -e '/^r/d' passwd 删除以r开头的行

sed -e '/bash$/d' passwd 删除以bash结尾的行

sed -e '/bash$/!d' passwd 删除不以bash结尾的行

a  添加

sed  '2ahello wesots' fstab 在fstab文件第二行添加hello westos

sed  '2ahello\nwesots' fstab 在fstab文件第二行添加多行,\n换行,hello和westos

sed  '$ahello\nwesots' fstab 在fstab文件最后一行添加

sed  '/#/ahello\nwesots' fstab 在fstab文件中所有含#的行后添加

c  替换

sed '/sbin/chello' passwd  把passwd文件中所有含有sbin的行替换成hello

sed '/^r/chello' passwd  把passwd文件中所有以r开头的行替换成hello

sed '$chello' passwd  把passwd文件中最后一行替换成hello

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

sed '/bash/w testfile'  passwd  把passwd文件中所有含有bash的行写入到testfile文件中

i  插入

sed '/see/ihello fstab 在fstab文件中所有含see的行前插入hello(a是在行后添加)

sed '1ihello fstab 在fstab文件中第一行插入hello(1a其实是在第一行后添加,为第二行)

r 整合文件

cat test1 test2把test1(内容为123)和test2(内容为456)整合到一起显示(123456),tac test2 test1 即为反向显示 (654321),这种方法整合只能在后面插入整合

sed '1r 789test2' test1 即把test2整合到test1的第一行后面(178923456)

注:文件中的每一个数字独占一行。

sed字符替换

sed 's/:/@/g' passwd  把passwd文件中所有行的:替换为@

sed '1,5s/:/@/g' passwd  把passwd文件中第一行到第五行的:替换为@

sed '/r/s/:/@/g' passwd  把passwd文件中含有r行中的:替换为@

sed '/root/,/daemon/s/:/@/g' passwd  把passwd文件中root到daemon行中的:替换为@

sed -e '7s/:/@/g;$s/:/@/g' passwd  把passwd文件中第七行和最后一行中的:替换为@

以上替换并未改变文件原内容

sed 's/#//g' -i passwd  把passwd文件中所有#替换为空,即删除,并保存。

注:其中的//可以用@代替,效果一致,如sed 's@#@@g' -i passwd等同于 sed 's/#//g' -i passwd

sed 's/\//#/g' passwd 把文中/替换为#,\为转义字符。等同于sed 's@/@#@g' passwd

练习:

写脚本Apache_port.sh,脚本接入数字,http端口就改为该数字端口

如shh Apahce_port.sh 8080 ,Apache端口就被修改为8080

#awk

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

awk -F : 'BEGIN{print "start"}{print $1}END{print "end"} passwd

开始时输出start,然后输出passwd文件的第一列,结束后输出end,-F指定以冒号为分隔符,$1为第一列,$2则为第二列以此类推,$0为所有的列。{print $1,$3}则为输出第一列到第三列。

awk -F : 'BEGIN{print "start"}{print NF}END{print "end"} passwd  (NF输出文件中所有行的列数,即每一行有多少列;NR则输出所有列的行数,即行号;FILENAME则输出指定文件的名称,即passwd;)

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

awk -F :  '/bash|nologin/{print $1,$7}'  passwd 一个条件内两个元素或者关系

awk -F :  '/bash/||/nologin/{print $1,$7}'  passwd 两个条件或者关系

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

awk -F :  '$7~/bash/{print}'  passwd  指定第七列含有bash的行

awk -F :  '$7!~/bash/{print}'  passwd  指定第七列不含有bash的行

练习:

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

awk -F : 'BEGIN{N=0}$6!~/^\/home/&&/bash$|sh$/{N++}END{print N}'  /etc/passwd

冒号分隔,第六列不以/home开头并且不以bash或sh结尾的,开始N为0,符合条件则N加一,输出N

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值