shell 中的文本处理工具(grep、sed、awk)

一、grep(正则表达式)

  • 全称:Globally search a Regular Experssion and Print
    grep -E (扩展正则表达式)
  • 过滤以bash结尾的行
    在这里插入图片描述
    过滤以bash结尾或以nologin结尾的行
    在这里插入图片描述
    passwd文件内容如下
    在这里插入图片描述
    过滤root关键字(可以看到chroot也被过滤出来的,grep的贪婪模式,只要包含指定字符串,就过滤出来);
    -i:忽略大小写;
    在这里插入图片描述
    grep -E “<root” passwd :root字符之前不能有字符;
    grep -E “root>” passwd :root字符之后不能有字符
    在这里插入图片描述
    grep -5 :显示过滤行以及上面5行和下面5行
    在这里插入图片描述
    grep -n :显示匹配的行所在行号;
    grep -A 5:显示过滤行以及下面5行;
    grep -B 5:显示过滤行以及上面5行
    在这里插入图片描述
    grep -v :反向过滤;
    显示root在中间的行(过滤出来除了以root开头和root结尾的行)
    在这里插入图片描述
    westos文件内容如下;
    w.s :w开头s结尾中间有1个任意字符
    在这里插入图片描述
    *:字符出现任意;
    w.{4}s :w开头s结尾中间有4个任意字符
    在这里插入图片描述
    w.{1,}s :w开头s结尾中间最少有1个任意字符;
    w.{1,3}s :w开头s结尾中间有1-3个任意字符;
    w.?s :w开头s结尾中间有0到1个任意字符
    在这里插入图片描述
    w.+s:w开头s结尾中间有1个到任意个;
    we{,3}s:w开头s结尾中间的e字符出现0-3次
    在这里插入图片描述
    w(eb){,3}s:w开头s结尾中间的eb字符串出现0-3次
    在这里插入图片描述
  • 练习脚本:请显示系统中能被su命令切换的用户名称
    在这里插入图片描述

二、sed

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

  • passwd文件内容如下
    在这里插入图片描述
    查看passwd内容,并对每行前面进行编号(除了空行),重定向到wesostest文件
    在这里插入图片描述
    head、tail命令查看第一行和最后一行
    在这里插入图片描述

  • p:显示
    sed -n 5p westos :显示第五行;不加-n会显示所有内容,并将第五行多显示一次
    在这里插入图片描述
    显示root所在的行;
    显示第三行和第五行
    在这里插入图片描述
    显示最后一行;
    显示第一行
    在这里插入图片描述
    显示3-5行;
    显示7-最后一行
    在这里插入图片描述

  • d:删除
    删除第五行;
    删除root所在的行
    在这里插入图片描述
    删除第五行和最后一行
    在这里插入图片描述

  • a:添加
    在第五行后面添加内容;
    在含有root的行后面添加内容
    在这里插入图片描述
    在第二行后添加内容(含有换行)
    在这里插入图片描述

  • i:插入
    在第一行/最后一行之前插入内容
    在这里插入图片描述

  • c :替换
    将第一行的内容替换为hello world;
    将含有root的行替换为hello world;
    在这里插入图片描述

  • w:把符合的行写到指定文件中
    把含有root的行写入file中
    在这里插入图片描述
    两个文件内容如下
    在这里插入图片描述
    cat命令将两个文件整合(顺序不同,结果不同)
    在这里插入图片描述
    两个>表示追加:
    将file文件内容追加到westostest文件之后,此时westostest文件内容发生变化
    在这里插入图片描述

  • r:整合文件
    将file文件的内容整合到westostest文件的第五行之后
    在这里插入图片描述
    此时westostest文件内容未发生变化
    在这里插入图片描述
    -i:把sed处理的内容保存到westostest文件中
    在这里插入图片描述

  • sed 字符替换
    将/etc/passwd 文件复制到/mnt目录,作为实验;
    westos文件内容如下
    在这里插入图片描述
    将所有的:替换为###在这里插入图片描述
    在每行前面加序号
    在这里插入图片描述
    将换行符转换为空格(由于sed是逐行检测的,要加入N,否则命令不起作用)
    在这里插入图片描述
    将输出的内容重定向到westos文件中;
    在这里插入图片描述
    删除每行最前面的数字
    在这里插入图片描述
    每行后面都加一个空行;
    在这里插入图片描述
    只有最后一行后面加空行;
    在这里插入图片描述
    只有最后一行后面不加空行;
    在这里插入图片描述
    将1-5行的:转换为%%输出
    在这里插入图片描述
    将第一行和第五行的:转换为%%输出(两种方法)
    在这里插入图片描述
    将daemon和lp所在的行的:转换为%%输出
    在这里插入图片描述
    将所有的/转换为###(斜杠需要转译)(两种方法)
    在这里插入图片描述
    将第五行和最后一行的内容删除,并输出;
    除了以10开头的行以外的行都删除
    在这里插入图片描述

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

  • 查看端口现在运行的情况 (httpd服务正在使用)
    在这里插入图片描述
    脚本内容如下
    在这里插入图片描述
    测试
    在这里插入图片描述
    此时httpd服务的主配置文件的端口号已改变
    在这里插入图片描述

三、awk

awk -F 分隔符 BEGIN{}{}END{} FILENAME
NR :行数
NF :列数
FILENAME :文件名称本身
westos :westos变量值
“westos” :westos字符串
$0 #所有的列
$1 #第一列
$2 #第二列
$3 #第三列

  • westos文件内容如下
    在westos文件最开始加上westos字符串,最后加上end字符串,打印设定完成后的文件第一列
    在这里插入图片描述
    统计文件行数;
    显示第一列;
    显示以bash结尾的第一列
    在这里插入图片描述
    以bash结尾并且不含有root的行;
    以bash结尾或者含有root的行;
    在这里插入图片描述
    以bash结尾或者含有ftp的行
    在这里插入图片描述
    westos文件的第7列含有bash关键字,则显示相应的第一列;
    westos文件的第7列不含有bash关键字,则显示相应的第一列;
    westos文件的第7列不含有bash关键字,则显示相应的所有列;
    在这里插入图片描述
    westos文件的第六列没有root关键字并且以sync结尾的行,显示第一列;
    westos文件的第六列没有root关键字或者以sync结尾的行,显示第一列;
    awk -F : ‘!/root/|/sync$/{print ¥1}’ westos:不含有root关键字并且不以sync结尾,显示第一列
    在这里插入图片描述
  • 课后练习:
    1、统计在系统中能su切换的并且用户家目录不在/home下的用户数量
    方法一:脚本内容如下
    在这里插入图片描述
    方法二:
    在这里插入图片描述
    2、计算系统当前所使用的内存总和
  • 指定显示进程的内存信息
    在这里插入图片描述
    将第一行和含有0.0的行过滤掉
    在这里插入图片描述
    脚本内容如下;
    $1: 传入脚本的第一个参数
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值