shell-2-文本处理工具

本文详细介绍了Linux shell中的文本处理工具,包括grep、sed和awk的使用。通过多个实验展示了如何过滤、查找、替换和处理文本内容。还探讨了grep的正则表达式匹配,sed的行处理技巧,以及awk的列操作和条件判断。最后,提供了练习题目来巩固所学知识。
摘要由CSDN通过智能技术生成

主题:文本处理工具

一、grep

grep 全局搜索正则表达式

  • 固定字符表示通用匹配
  • whatis grep man grep 查看grep用法
  • 正则表达式分为两种:传统+扩展正则表达式
  • 对应的 有两个命令 grep(传统) 和 egrep(扩展)
  • egrep = grep -E

grep 格式
grep 匹配条件 处理文件
实验

实验(一)

(1)cp /etc/passwd . 复制到当前
(2)vim passwd
删除前面一些,追加内容
root:root:test
test:test:root
ROOT:test
roothahahaahahahh
(3)过滤root关键字
grep root passwd 只显示过滤的关键字
(4)grep使用的贪婪模式,防止贪婪模式
grep -iE “<root>” passwd 过滤掉roothahahah
(5)以root开头(也就是每一行以root开头!)
grep ^root passwd
grep -i ^root passwd
(6)以root结尾
grep root$ passwd
(7)过滤忽略大小写
grep -i root passwd
(8)root之前、之后不能有字符(\表示之前或者之后不能有字符)
root字符之前不能有字符
grep -E “<root” passwd
root字符之后不能有字符
grep -E “root>” passwd
总结:不能有的是英文数字字符,不包括符号\等!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验(二)

实验环境
cp /etc/passwd . 复制到当前
vim passwd
删除前面一些,中间添加westoslinux test
(1)显示过滤行以及上面几行和下面几行 grep -数字
grep -2 westoslinux passwd
(2)显示匹配的行所在行号 grep -n
grep -n westoslinux passwd
(3)显示过滤行以及下面几行(after)grep -A
grep -A2 westoslinux passwd
(4)显示过滤行以及上面几行grep -B
grep -B2 westoslinux passwd
(5)反向过滤grep -v
grep -v westoslinux passwd除了匹配行,其他都显示出来
(6)grep -n -2 westoslinux passwd
在这里插入图片描述
在这里插入图片描述

实验(三)

grep 字符数量匹配规则

^westos以westos开头
westos$以westos结尾
w…sw开头s结尾,中间有4个字符(一个.代表一个字符)
…ss结尾前有5个任意字符
*字符出现0–任意次
0–1次(0次或者1次)
+1–任意次
{n}n次
{m,n}m到n次
{0,n}0到n次
{,n}0到n次
{m,}最少m次
(jia){2}jia字符串出现2次

实验过程:
(1)一个 . 代表一个字符
(2)当确定不了字符数时
(3)grep -E “wh{4}s” test h出现4次!
(4)grep -E “wh{2,4}s” test h出,2,3,4次!也就是2-4次!
(5)grep -E “wh{,4}s” test h最多出现4次!
(6)grep -E “wh{4,}s” test h最少出现4次!
(7)字符串出现两次 grep -E “w(lee){2}s” test
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习脚本:
请显示系统中能被su命令切换的用户名称
在这里插入图片描述

二、sed

  • 常用于修改配置文件
  • 操作ASCII纯文本,系统中大部分都是ASCII纯文本,尤其是配置文件
  • cat passed 处理文件时,在内存中开辟出一个新的空间,叫模式空间
  • sed 会对模式空间逐行进行阅读,当满足条件,就会把它取出,并显示!不符合,不予理睬;
  • 逐行处理

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

对字符的处理

p显示打印的意思
d删除
a添加
c替换
w写入;(放匹配行下面);把符合的行写到指定文件中
i插入(放到匹配行的上面)
r整合文件
e多条策略
n静默模式

实验过程
实验环境:
(1)cd /mnt cp /etc/passwd .
(2)cat passwd -b > westos 显示行号,导入文件westos
(3)rm -fr passwd
1.p
(1)sed -n 5p westos 其中,-n 是静默模式表示不显示模式空间的内容 ,5p是规则,p是打印的意思
(2)sed 5p westos 第五行多打印一次
(3)命令规则写法
vim sedrule 写入内容 5p
sed -n westos -f sedrule
sed -n -f sedrule westos
(4)sed -n 3,5p westos静默显示3-5行
sed -ne 3,5p westos静默显示3-5行
(5)sed -ne “3p;5p” westos 参数e表示多条策略,多条策略用分号;隔开
(6)sed -ne 5,$ p westos 其中$p表示最后一行
(7)sed -n ‘/^#/p’ fstab 显示以#开头的行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
sed命令不更改源文件,在终端显示满足条件的内容
2.d
实验环境:
cp /etc/fstab .
vim fstab 看到文件中很多的#
(1)sed 5d westos 删除第五行
(2)sed ‘/^#/d’ fstab 把以#开头的行删除
(4)sed ‘/^UUID/!d’ fstab只想保留UUID开头的行
(5)sed -e ‘5,$d’ westos 删除5到最后一行
在这里插入图片描述
在这里插入图片描述

3.a 添加
(1)sed -e ‘$a hello word’ fstab最后一行添加helloword

(2)sed -e ‘$a hello\nworld’ fstab换行添加

(3)sed -e ‘/^#/a hello world’ fstab意思是在#开头的行下面都会添加helloworld
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.c 替换
(1)sed -e ‘/^#/c hello world’ fstab #开头的行变成helloword
(2)sed ‘5chello world’ fstab
在这里插入图片描述
在这里插入图片描述

5.w 把符合的行写到指定文件中
sed ‘/^UUID/w westosfile’ westos把westos文件中UUID开头的写入westosfile中
在这里插入图片描述
在这里插入图片描述

6.i 插入,插在指定的上面
sed ‘5ihello westos’ westos
在这里插入图片描述
5.r 整合文件

sed ‘5r haha’ westos 把haha文件整合到westos文件的第5行下面
在这里插入图片描述
在这里插入图片描述

字符转换
斜杠表示分隔符

练习:
Apache_port.sh
此脚本后接入数字
http的端口就改为此数字
假设selinux为关闭状态
(实现用脚本自动改变apache的端口)
在这里插入图片描述

三、awk

用法:
awk -F 分隔符 ‘BEGIN{}{}END{}’ FILENAME
对上述用法解释:

  • 不写分隔符 默认是空格
  • 三个中括号{}分别代表开始、中间、结束做的动作!
  • BEGIN后可以只写一个{},无论那种格式,BEGIN都要用单引号括起来!
  • 例如 awk ‘BEGIN{A=10;print A+10}’
    实验:统计文件的行数
    基础知识:
    (1)""表示的是字符串
    (2)没有引号表示的是变量
    (3)NR 行数 ;NF 列数;FILENAME文件名称
NR行数
NF列数

实验过程:
(1)awk ‘BEGIN{ print “LINE”;N=0 }{N++}END{print N}’ westos 打印列数!
(2)awk ‘{ print NR}’ westos 打印行数
(2)awk ‘{ print NF}’ westos 默认以空格为分隔符,打印列数
(3)awk -F : ‘{ print NF}’ westos 以冒号为分隔符打印列数
(4)awk -F : ‘/bash $ /{ print NF}’ westos 打印以bash结尾的行的列数,条件写在两个/ /里面!
(5)awk -F : ‘/bash $ /{ print }’ westos把以bash结尾的行的内容打印出来
其中:westos 表示westos变量值;“westos” westos字符串;/bash$/ 表示条件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实验:条件
/添加1|条件2/ 条件1或者条件2
/添加1/||/条件2/ 条件1或者条件2
/添加1/&&/条件2/ 条件1并且条件2
列的表示形式:
$0 表示所有列
$1 第一列
$2 第二列
$3 第三列

~ 表示是的意思
!~ 表示不是的意思
实验过程:
(1)awk ‘BEGIN{A=10;print A+10}’
(2)awk -F : ‘/bash $ /{ print NF}’ /etc/passwd
(3)awk -F : ‘/^root/&&/bash $/{print $0}’ /etc/passwd两个条件
(4)awk -F : ‘/^root|bash $/{print $1}’ /etc/passwd 一个条件包含两个信息
(5)awk -F : ‘/^root/&&/bash $/{print $1}’ /etc/passwd打印符合条件的第一列
(6)awk -F : ‘/^root/&&/bash $/{print $1,$7}’ /etc/passwd 第一列和第七列
(7)awk -F : ‘/^root/&&/bash $/{print $0}’ /etc/passwd打印符合条件的所有列
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(8)想看一下,某一列的内容是否满足条件
awk -F : ‘$7~/bash/{print}’ /etc/passwd 看一下第7列的内容是不是bash,逐行查询后,满足条件的打印出来!
(9)反选某一列的内容不是的打印出来
awk -F : ‘$7!~/bash/{print}’ /etc/passwd
(10)第6列的内容不是home
awk -F : '$6!~/home/ $/{print} ’ /etc/passwd
(11)第6列的内容不是home,并且加上一个条件:以bash结尾的行打印出来。这是两个条件,满足前一个的基础上,再根据第二个条件进行筛选
awk -F : '$6!~/home/&&/bash $/{print} ’ /etc/passwd
(12)awk ‘/bash $/{print FILENAME}’ /etc/passwd /etc/passwd文件以bash结尾的都打印一次名称。FILENAME表示打印文件的名称
注意:上述 $ 和前一个字符是不分开的!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
补充知识:
&&和&的区别
1.1 相同点:
&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。
1.2不同点:
1.2.1. &&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。
1.2.2.&作为为运算时,&是按位与操作,参加运算的两个数据按照二进制位进行“与”运算。
如果两个相应的二进制位都为1,那该位的结果值就是1,否则为0,即0&0=0,0&1=0,1&1=1,1&0=0。
|| 和 | 的区别
2.1 相同点 :当二者表示或的时候,二者都true则true,否则为false。
2.2 不同点:
2.2.1 || 也存在短路的问题,当前者为true时,则不会判断后面的表达(与上面的&&类似)
2.2.2 |是按位或操作,参加运算的两个数据按照二进制位进行“或”运算,如果两个相应的二进制位中只要有一个为1,则该位结果就是1,即为0|1=1、1|1=1、1|0=1、0|0=0。
||是逻辑或运算符,直接看意思,a||b,若a、b中有一个为真,则a||b结果为真。

总结
(1)双引号和$一起使用,会被识别为变量,必须使用单引号
(2)因为双引号不能忽视 $ 和\ `三个特殊符号,$ 和字符连用时,自然被识别为是变量呀
(3)$1 在awk中出现时意思是 第一列;在其他的场景中,还可以表示普通用户;表示变量。
(4) 单引双引的使用!

练习:统计在系统中能su切换的并且用户家目录不在/home下的用户数量
在这里插入图片描述
在这里插入图片描述
总结:
(1)能在系统中进行su切换的,首先要满足的条件是 在文件/etc/passwd中以sh结尾
(2)第二个条件是:不在家目录中,也就是第6列的值不能等于/home

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值