Linux中的三大文本处理工具

1.grep

含义:
  grep (Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用特定的模式匹配(包括正则表达式)搜索文本,并默认输出匹配行。
  Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
 grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

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

例:
grep root passwd ##过滤root关键字
在这里插入图片描述
grep -i root passwd ##忽略大小写
在这里插入图片描述
grep ^root passwd ##以root 开头
在这里插入图片描述
grep root$ passwd ##以root结尾
在这里插入图片描述
grep -E “\<root” passwd ##root 字符之前不能有字符
在这里插入图片描述
grep -E “root \>” passwd ##root 之后不能有字符
在这里插入图片描述
grep -数字 ##显示过滤行以及上面几行和下面几行
在这里插入图片描述
grep -n ##显示匹配的行所在的行号
在这里插入图片描述
grep -A ##显示过滤行以及过滤行下面的几行
在这里插入图片描述
grep -B #显示过滤行以及过滤行上面的几行
在这里插入图片描述
grep -v ##反向过滤,显示除过滤行以外的行
在这里插入图片描述
grep字符数量匹配规则

例:

w....s ##以w开头s结尾中间4个任意字符
在这里插入图片描述

.....s ##以s结尾,前面5个任意字符
在这里插入图片描述

* ##字符出现0次到任意次
在这里插入图片描述

? ##0到1次
在这里插入图片描述

在这里插入图片描述

{n} ##出现n次
在这里插入图片描述

{m,n} ##出现m到n次
在这里插入图片描述

{0,n} ##出现0-n次
在这里插入图片描述

{,n} ##出现0-n次
在这里插入图片描述

{m,} ##至少出现m次
在这里插入图片描述

(lee) {2} ##lee字符串出现俩次
在这里插入图片描述

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

2.sed (stream editor)

(1) sed 命令的概念
sed 是一项linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能要强大一些。
sed用来操作纯ASCII码的文本。
sed处理时,把当前的行存储在临时缓冲区中,称为“模式空间”,可以指定仅仅处理哪些行。
sed符合模式条件的处理,不符合条件的不处理,处理完成之后把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。
原来的内容是在磁盘中放着,现在用sed命令处理的时候将内容掉入内存的一个地方用户处理,这个处理空间也叫做模式空间。
(2)命令格式
sed 参数 命令 处理对象
sed 参数 处理对象 -f 处理规则文件

(3)对字符的处理

p显示
d删除
a添加
c替换
w把符合的行写到指定文件中
i插入
r整合文件

1) p

sed -n 5p westos ##显示westos中的第五行
在这里插入图片描述

sed -n 3,5p westos ##显示westos文件中的3到5行
在这里插入图片描述

sed -ne "3p;5p" westos ##显示3行和5行
在这里插入图片描述

sed -ne ‘5,$p’ westos ##显示westos文件中的5到最后一行
在这里插入图片描述

sed -n '/^#/p' fstab ##显示fstab文件中以#开头的行
在这里插入图片描述

2) d ##删除

sed 5d westos ##删除westos文件中的第五行
在这里插入图片描述

sed '/^#/d' fstab ## fstab文件中以#开头的行
在这里插入图片描述

sed '/^UUID/!d/' fstab ##除了以UUID开头的行不删,其他行都删
在这里插入图片描述

sed -e '5,$d' westos ##删除第五行到最后一行
在这里插入图片描述

3)a ##添加

sed -e '$a hello world' fstab ##在fstab文件最后添加一行hello world
在这里插入图片描述

sed -e '$a hello\nworld' fstab ##在fstab文件最后添加hello world 俩行
在这里插入图片描述

sed -e '/^#/a hello world' fstab ##在fstab文件中每一行以#开头的行下面添加一串 hello world
在这里插入图片描述

4)c ##替换

sed -e '/^#/c hello world' fstab ##讲fstab文件中以#开头的行替换成hello world
在这里插入图片描述

sed '5chello world' westos ##讲westos文件中的第5行替换成hello world
在这里插入图片描述

5)w ##把符合的行写到指定文件中

sed '/^UUID/w westosfile' westos ##把westos中UUID开头的行写入westosfile中

6) i ##插入

sed '5ihello westos' westos ##在westos 文件中的第五行上面插入 hello westos行
在这里插入图片描述

7)r ##整合文件

sed '5r haha' westos ##将haha文件整合到westos文件中第五行的下面
在这里插入图片描述

(4)字符的替换

1)sed 's/:/###/g' westos ##将westos文件中所有的:替换成###,其中g代表所有列,不写g将默认第一列
在这里插入图片描述
在这里插入图片描述

  1. sed '1,5s/:/###/g' westos ##将westos文件中1-5行的:替换成###
    在这里插入图片描述

3)sed '1s/:/###/g' westos ##将westos文件中第一行的:替换成###
在这里插入图片描述

4)sed '1s/:/###/g;5s/:/###/g' westos ##将westos文件中的第一行和第五行中的:替换成###
在这里插入图片描述

sed 's/\//###/g' westos ##将westos文件中的/转换为###
在这里插入图片描述

sed 's@/@###@g' westos ##@符号用作分隔符,和/一样,将westos中的/符号转换为###符号
在这里插入图片描述

sed '/lp/,/shutdown/s/:/###/g' westos ##将westos文件中的lp到shutdowns行的:替换成###
在这里插入图片描述

sed 's@/@###@g' -i westos ##把sed处理的内容保存到westos文件中
在这里插入图片描述

3.awk

使用方法:awk -F 分隔符 BEGIN{}{}END{} FILENAME

awk 'BEGIN{print "LINE";N=0}{N++}END{print N} westos ##BEGIN是预处理,awk是逐行处理,N++依次+1,可以统计westos文件的行数
在这里插入图片描述

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

awk '{print NR}' westos ##打印westos文件的行号
在这里插入图片描述

awk '{print NF}' westos ##每行打印westos文件的列数,默认-F分隔为空格
在这里插入图片描述

awk -F : '{print NF}' westos ##以:为分隔符,逐行打印westos中的列数
在这里插入图片描述

awk -F : '$7~/bash$/{print FILENAME}' /etc/passwd ##将/etc/passwd文件中是以bash结尾的行的文件名称打印出来
在这里插入图片描述

加条件:
/条件1|条件2/ ##条件1或者条件2
/条件1/||/条件2/ ##条件1或者条件2
/条件1/&&/条件2/ ##条件1并且条件2

awk -F : '/bash$/{print}' westos ##将westos中以bash结尾的行打印出来
在这里插入图片描述

awk -F : '/bash$/{print NF}' westos ##打印westos文件中以bash结尾的行的列数
在这里插入图片描述

awk -F : '/bash$/||/^adm/{print}' westos ##将westos文件中的以bash结尾的或者adm开头的行打印出来
在这里插入图片描述

awk -F '/bash$/&&/^root/{print}' westos ##将westos文件中以bash结尾并且root 开头的行打印出来
在这里插入图片描述

$0所有列
$1第一列
$2第二列

awk -F '/bash$/&&/^root/{print $1,$7}' westos ##显示打印westos文件中以bash结尾,root 开头行的第一列和第七列
在这里插入图片描述

awk -F : '/bash$/&&/^root/{print $0}' westos ##将westos中以bash结尾,root 开头行的所有列打印出来
在这里插入图片描述

awk -F '$6!~/home/&&/bash$/{print}' /etc/passwd ##/etc/passwd 文件的第六列没有home关键字并且以bash结尾的行
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值