Linux系统下shell中的文本处理

本文介绍了Linux系统下用于文本处理的三个重要工具:grep、sed和awk。grep是一种强大的文本搜索工具,允许使用正则表达式进行模式匹配。文章详细讲解了grep中的字符匹配位置设定和次数设定。接着,探讨了sed的各种模式,如p、d、c、a、i和w模式,以及sed的其他实用技巧。最后,简要介绍了awk的基本用法。

grep 文本过滤命令

grep全称 Global search regular expression and print out the line,全面搜索正则表达式并显示出来,grep 命令是一种强大的文本搜索工具,根据用户指定的“模式“对目标文本进行匹配检查,打印匹配到的行,由正则表达式或者字符及基本文本字符所编写的过滤条件

基本正则表达式和扩展正则表达式

ls /etc/ | grep -E *.conf = ls /etc/ egrep *.conf
grep -E “root|ROOT” passwd  ##寻找root和大写的root(ROOT)

在这里插入图片描述

grep -Ei “root” passwd    ##寻找root,不区分大小写

在这里插入图片描述

grep -Ei “^root”   ##寻找以root开头的行,不区别大小写

在这里插入图片描述

grep -Ei “root$”  ##寻找以root结尾的行,不区分大小写
grep -Ei  "^root|root$" passwd  ##寻找以root开头和root结尾的行,不区分大小写

在这里插入图片描述


grep -Ei "^root|root$" passwd -v | grep root ##寻找在某行中间位置的root -v:除了
grep -Ei "^root|root$" passwd -v   ##寻找除了在某行开头的root和某行末尾的root,搜索出来包括没有root的行

在这里插入图片描述

grep ROOT passwd -n  ##寻找含ROOT的行的行号

在这里插入图片描述

grep ROOT passwd -2  ##显示搜到的结果的上下两行

在这里插入图片描述

grep ROOT passwd -n2 ##显示搜到的结果的上下两行,并标示出行号

在这里插入图片描述

grep ROOT passwd -A1 ##显示搜到的结果的下面一行

在这里插入图片描述

grep ROOT passwd -B1  ##显示搜到的结果的上面一行

在这里插入图片描述

grep 中字符匹配位置的设定

grep 默认模式是贪婪模式
grep 从贪婪模式中退出 \<关键字 关键字\> \<关键字\> 会把前后的字符不显示,但是注意,如果遇到/情况会不生效,可能把/当成分隔符来识别了

grep中字符匹配次数设定
参数解释说明
.x…y x和y之间有两个字符 .表示一个字符
x*y表示x出现0-任意次,*之前的字符出现0-任意次
x?y出现0-1次
+出现1-任意次
{n}字符出现n次,并解除贪婪模式,前后都不显示其他的
{m,n}字符至少出现m次,最多出现n次
{m,}字符至少出现m次
.*关键字之间匹配任意字符
grep -E “\<x{1}y” westos  ##x至少出现一次,解除贪婪模式

在这里插入图片描述

grep -E “\xy{1}” westos ##y至少出现一次,解除贪婪模式

在这里插入图片描述

grep -E “\(xy){1}” westos ##xy至少出现一次,解除贪婪模式

在这里插入图片描述

sed

p模式

sed -n '/\:p'fstab  ##只显示带有:的行

在这里插入图片描述

sed -n '/^#/p'  fstab   ##只显示以#开头的行

在这里插入图片描述

sed '/^UUID/p' fstab ##不仅显示UUID开头的行,还显示模式空间里的所有内容,所以会出现两行UUID

在这里插入图片描述

sed -n '/UUID$/p' fstab  ##显示以UUID结尾的行

在这里插入图片描述

sed -n '2,6p' fstab   ##显示第二行到第六行

在这里插入图片描述

sed -n '2,6!p' fstab   ##不显示第二行到第六行

在这里插入图片描述

sed -n '2p;6p' fstab    ##只显示第二行和第六行

在这里插入图片描述

d模式操作

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

在这里插入图片描述

sed '1,4d' fstab    ##删除fstab的第1到4行
sed '1d;4d' fstab   ##删除fstab的第1行和第四行

在这里插入图片描述

c模式

sed '/^#/chellowestos' fstab ##将fstab中以#号开头的行更改为hellowestos

在这里插入图片描述

a模式

sed '/^#/ahellowestos' fstab  ##在fstab文件以#开头行的末尾加入hellowestos

在这里插入图片描述

sed '/^#/ahello\nwestos' fstab  ##在fstab文件以#开头的莫为加入hello westos (两行,\n表示换行)

i模式

sed '/^#/ihellowestos' fstab   ##在fstab文件以#开头行的前面添加hellowestos

在这里插入图片描述

sed '/^#/ihello\nwestos' fstab   ##在fstab文件以#开头行的前面添加hellowestos(两行,\n表示换行)

在这里插入图片描述

w模式

sed '/^#/w /mnt/westosfile' fstab   ##将fstab里面以#开头的行写入到/mnt/westosfile ,并且显示模式空间里的内容

在这里插入图片描述
在这里插入图片描述

sed -n '/^#/w /mnt/westosfile' fstab ##将fstab里面以#开头的行写入到/mnt/westosfile,不显示模式空间里面的内容

在这里插入图片描述

sed '/^#/=' fstab   ##给fstab加入行号

在这里插入图片描述

sed '/^[0-9]/d' fstab  ##删除以数字开头的行,-i fstab 导入到fstab,如果此时使用> fstab,会把fstab文件清空
sed '6r fstab' -i westos ##把fstab中以#开头的行整合到westos这个文件的第6行

在这里插入图片描述

sed '6r fstab' westos -i westos  ##这样整合打开westos文件会发现出现两遍fstab中以#开头的内容

在这里插入图片描述

sed '6r fstab' westos > westos  ##这样会清空westos文件

sed的其他用法

sed -n '/^UUID/'=fstab   ##屏蔽模式空间里的其他内容,只显示以UUID开头的行

在这里插入图片描述

sed -n -e '/^UUID/p' -e '/^#/d'=fstab  ##-e起到分号的作用,,表示显示
##sed -n -e '/^UUID/p' -e '/^#/=' fstab 这个命令也可以写在一个文件里面,就是运行的规则
##vim rule  在文件中写入要运行的规则,比如/^UUID/p/ (换行)/^#=  
##sed -f rule fstab   ##对fstab文件执行rule(文件名)里的规则
sed 'G' passwd   ##在每一行后加空行

在这里插入图片描述

sed '$G' passwd   ##只在最后一行后加空格

在这里插入图片描述

sed '$!G' passwd  ##在每一行后加空行除了第一行

在这里插入图片描述

sed '=' passwd | sed 's/\n//'##目的是将空行去掉,但是sed在工作的时候只加载一行,不会读到下一行,读第一行的话没有读取到换行符,就不存在替换换行符号这个说法

在这里插入图片描述

sed '=' passwd | sed 'N;s/\n//' ##N:提前与加载下一行的内容,这样就会识别到换行符,就会进行替换

在这里插入图片描述

sed -n '$p' passwd  ##显示最后一行 tail -n 1 passwd  也可以实现

在这里插入图片描述
在这里插入图片描述

sed 's/#//g' fstab  ##将fstab中的#去掉,sed 's/#/$/g' fstab;将fstab中的#替换成$,g是替换所有列中识别到的内容(起全部替换的作用),不加g只会替换该行第一个匹配到的字符。

在这里插入图片描述

sed '1,5s/#//g' fstab   ##将第一行到第五行的#去掉
sed -e '1s/#//g' -e '5s/#//g' fstab ##将第一行和第5行的#替换掉

在这里插入图片描述

sed 's/\//$/g' fstab  ##将fstab中的/替换为$ ,其中 \/表示对/进行转义,否则无法识别/ \表示转义

在这里插入图片描述

sed 's/^\//$/g' fstab   ##将fstab中以/开头的行替换为$

在这里插入图片描述

sed 's@/@###@g'fstab  ##@是分割符,相当于‘/’,将/替换为###

在这里插入图片描述

sed 's/sbin/westos/g' passwd ##将psswd中的sbin替换为westos

在这里插入图片描述
在这里插入图片描述

sed 's/sbin/westos/g;s/nologin/lee/g' passwd  ##多条命令的同时替换

在这里插入图片描述

sed '/adm/,/halt/s/sbin/westos/g' passwd ##只对adm到halt之间出现的sbin替换为westos,用于指定的范围的替换

在这里插入图片描述

awk

awk基本用法

awk -F : '{print NF}' passwd   ##-F : 以:作为分割符,统计passwd的每一行有多少列

在这里插入图片描述

awk -F : '{print NR}' passwd  ##显示这个文件的行的序号

在这里插入图片描述

awk -F : 'BEGIN{print “NAME”}{print "NR"}' passwd ##awk开始执行的时候显示“NAME”,再打印行的序号

在这里插入图片描述

awk -F : 'BEGIN{print “NAME”}{print "NR"}END{print "end"}' passwd ##在结束时显示end

在这里插入图片描述

awk -F : 'BEGIN{print “NAME”}{print $1,7}END{print "end"}' passwd  ##$1第一列,打印第1列和第7列

在这里插入图片描述

awk -F : 'BEGIN{print “NAME”}{print $0}END{print "end"}' passwd ##打印所有列
awk -F :'BEGIN{print “NAME”}{print $1="";print $0}END{print "end"}' passwd##打印第2行到第7行,$1=""相当于对第一列进行删除,注意!!!这样显示的效果不含分割符,如果需要添加分隔符,需要添加

在这里插入图片描述

awk -F 'BEGIN{print “NAME”}{print $1="";print $0}END{print "end"}' passwd | sed 's/ /:/g'

在这里插入图片描述

awk '/bash$/{print}' passwd  ##打印以bash结尾的行

在这里插入图片描述

awk '/bash$\>/{print}' passwd  ##打印以bash结尾的行,并且解除贪婪模式
awk '!/bash$/{print}' passwd  ##打印除了以bash结尾的行

在这里插入图片描述

awk '!/bash$/&&/nologin/{print}' passwd  ##打印不以bash结尾和有nologin的行

在这里插入图片描述

awk '!/bash$/&&!/nologin$/{print}' passwd ##打印不以bash和nologin结尾的行

在这里插入图片描述

awk 'BEGIN{n=0}/bash$/{n++}END{print n}' passwd ##计算一共有多少行以bash结尾

在这里插入图片描述

awk '/^[a-c]/{print}' passwd   ##打印以a,b,c开头的行

在这里插入图片描述

awk -F : '$6~/bin/{print}' passwd   ##打印第六列中bin的行,贪婪模式

在这里插入图片描述

awk -F : '$6~<\/bin/{print}' passwd ##打印第六列中bin的行,退出贪婪模式
awk -F :'$6!~<\/bin/{print}' passwd ##打印第6列不是bin的行
awk -F :'!/nologin$/{print $1}' passwd ##显示可以登录的用户的名称

在这里插入图片描述

awk -F :'BEGIN{n=0}/bash$/&&$6!~/^\/home/{n++}END{print n}' passwd  ##统计可登录并且加目录不再/home的用户

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值