Shell第二章:文本处理工具

 1.grep [Globally search a Regular Expression and Print]

grep
grep -E = egrep

1)grep 格式

1.grep 匹配条件 处理文件

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                ##反向过滤

2. 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次

实验:
grep ^bash passwd       #查找passwd文件中以bash开头的
grep bash$ passwd       #查找passwd文件中以bash结尾的


vim westos
    hes
    has
    heas
    heees
    haaas
    heaeas
    heaeaeas
grep h.s westos              #查找westos文件中以h开头s结尾中间1个任意字符
grep h..s westos             #查找westos文件中以h开头s结尾中间2个任意字符
grep h...s westos            #查找westos文件中以h开头s结尾中间3个任意字符
grep h.*s westos             #查找westos文件中以h开头s结尾中间任意个字符


grep -E 'h.+s' westos        #查找westos文件中以h开头s结尾中间1个到任意个 字符


grep -E 'h.?s' westos        #查找westos文件以h开头s结尾中间有出现0到1次个任意字符


grep -E 'h.{1,2}s' westos    #查找westos文件以h开头s结尾中间有出现1到2次个任意字符


grep -E 'h.{2}s' westos      #查找westos文件以h开头s结尾中间有出现2次任意的字符


grep -E 'h.{2,}s' westos     #查找westos文件以h开头s结尾中间有出现最少2次个任意字符


grep -E 'h.{,2}s' westos     #查找westos文件以h开头s结尾中间有出现0到2次任意字符 【最多2次】


grep -E 'he{2,}s' westos      #查找westos文件以he开头s结尾中间有出现最多2次任意字符


grep -E 'h(ea){2,}s' westos  #查找westos文件以h开头s结尾中间有出现ea字符出现最少2次


  2.sed
命令格式:
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

1)对字符的处理
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                ##删除
sed 5d    westos            ##删除第五行


sed '/^#/d'    fstab        ##把#开头的行删除


sed '/^UUID/!d' fstab        ##除了UUID以外的行都删除


sed -e '5,$d' westos        ##删除第5行到最后一行


a                ##添加
sed -e '$a hello world' fstab          #给fstab文件的最后一行添加hello world


sed -e '$a hello\nworld' fstab         #\n 表示换行


sed -e '/^#/a hello world' fstab       #给fstab文件的第一个字符是‘#’的行数后添加hello world


c                ##替换
sed -e '/^#/c hello world' fstab   #fstab文件中以#开头的行替换成hello world


sed '5chello world' fstab          #fstab文件中,第5行替换成hello world


w                ##把符合的行写到指定文件中
sed '/^UUID/w westofile' fstab    ##把westos中UUID开头的行写入westosfile中


i                ##插入
sed '5ilinux' westos    #给westos文件第5行上边添加linux


r                ##整合文件
sed '2r westosfile' westos     #将westosfile文件中的内容整合到westos文件的第2行后面


sed 字符替换
sed 's/:/###/g' westos        #s:表示所有行,g:表示所有列【把全文的:替换为###】
sed 's/:/###/' westos          #后边不加g表示带有:关键字的第一列
sed 's/:/###/g' westos 
sed '1,5s/:/###/g' westos    #把第一行到第五行的:替换为###   
sed '1s/:/###/g' westos      #把第一行的:替换为###
sed '1s/:/###/g;5s/:/###/g' westos    #把第一行和第五行的:替换为###
sed '/lp/,/shu/s/:/###/g' westos    #在passwd文件从lp行到shu行把:换成###
sed 's/\//####/g' westos 
sed 's@/@####@g' westos          #把全文的/替换为####

sed 's@/@####@g' -i  westos         把sed处理的内容保存到westos文件中
实验:
cd /mnt
 rm -rf *
 ls
 cp /etc/passwd .
 vim passwd 
 cat passwd 
 sed '/sbin/cwestos' passwd           #在passwd文件中把含有sbin的行替换成westos


 sed 's/sbin/westos/g' passwd         #在passwd文件中把全文的sbin替换成westos


 sed '1,5s/sbin/westos/g' passwd      #在passwd文件中把第1行到第5行的sbin替换成westos


 sed '2s/sbin/westos/g;5s/sbin/westos/g' passwd    #在passwd文件中把第2行和第5行的sbin替换成westos


 sed 's/sbin/westos/g;s/nologin/hello/g' passwd    #在passwd文件中把全文的sbin替换成westos,把全文的nolodin替换成hello


 cat passwd 
 sed '/lp/,/halt/s/sbin/westos/g' passwd     #在passwd文件中从lp开头的行到halt结尾的行,把sbin替换成westos


 sed 's@/@###@g' passwd             #在passwd文件中把全文件的/替换成###


 sed 's@/@###@g' -i passwd          #在passwd文件中把sed处理的内容(把全文件的/替换成###)保存到westos文件中

 

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

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

/bash$/            #条件
/条件1|条件2/        #条件1或者条件2
/条件1/||/条件2/    #条件1或者条件2
/条件1/&&/条件2/    #条件1并且条件2

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

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

实验:
  rm -rf *
  cp /etc/passwd .
  vim passwd 
  awk -F : '{print NR}' /mnt/passwd   #显示passwd文件的行数


  awk -F : '{print NF}' /mnt/passwd   #显示passwd文件每一行的列数


  awk -F : '{print FILENAME}' passwd   #显示passwd文件的文件名


  awk -F : 'BEGIN{westos=0}{westos++}END{print westos}' passwd   #在passwd文件中,给westos赋值,每处理一行westos这个值自动+1,最后显示westos字符【可以得到passwd文件有多少行】


  awk -F : '/nologin$/{print $0}' passwd  #显示每一行以nologin结尾的,所有的列


  awk -F : '/nologin$/{print $1,$3}' passwd   #passwd文件中,显示以nologin结尾的行数的,第一列和第三列


  awk -F : '/nologin$|^root/{print $1,$3}' passwd   #passwd文件中,显示以nologin结尾的或者以root开头的行数的,第一列和第三列  


  awk -F : '/nologin$/&&/^root/{print $1,$3}' passwd     #passwd文件中,显示以nologin结尾的并且以root开头的行数的,第一列和第三列 


  awk -F : '$7~/nologin$/{print $0}' passwd    #在passwd文件中,显示第7列是nologin结尾的,所有的列


  awk -F : '$7!~/nologin$/{print $0}' passwd    #在passwd文件中,显示第7列不是nologin结尾的,所有的 列


  awk -F : '$7!~/nologin$/&&/test/{print $0}' passwd      #在passwd文件中,显示第7列不是nologin结尾的,并且含有test的,所有的列

 

 课后练习:
1.统计在系统中能su切换的并且用户加目录不在/home下的用户数量

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

2.练习及脚本
Apache_port.sh
此脚本接入数字
http的端口就改为此数字
假设selinux为关闭状态
例如:
sh Apache_port.sh
ERROR: Pleaase input port number following script !!

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

3.请显示系统中能被su命令切换的用户名称
 egrep "sh$"  /etc/passwd | cut -d : -f 1

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值