shell文本处理工具

1.grep

grep
grep -E = egrep  查找指定的字符串

##grep 格式##


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

过滤出不含有chroot的行

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次

从westos 文件中过滤出w开头出现ab字符最少一次的字符

练习脚本:
请显示系统中能被su命令切换的用户名称 

 2.sed

命令格式:

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

对字符的处理
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                ##显示以#开头的行

显示fstab文件中不以#开头的行并且一开始就结束的行以外的其余行

sed -n '$p' fstab | sed -n '/^$/!p' ##显示最后一行(不显示空行)

sed -n '$=' fstab ##显示总共多少行

sed -n '$p' fstab  ##显示最后一行

 d                                               ##删除
sed  5d westos                       ##删除第五行
sed  '/^#/d'   fstab                    ##把#开头的行删除
sed   '/^UUID/!d'  fstab           ##除了UUID以外的行都删除
sed  -e  '5,$d'   westos

删除第五行 删除3-5行

删除三和五行

把#开头的行删除 

 a                                                     ##添加
sed -e '$a hello westos' fstab
sed -e '$a hello\nwestos' fstab
sed -e '/^#/a hello westos' fstab

以#开头的行添加hello westos

 在最后一行添加

在最后一行添加并且换行

i 为插入到之前      sed '$ihello westos' westos ##在最后一行之前插入

在第一行之前插入

                                                        ##替换
sed -e '/^#/c hello westos' fstab
sed '5chello world' westos 

把#开头的行替换成hello westos

把第五行换成hello westos

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

sed '/^#/w file' fstab 等价于sed '/^#/p' > file ##把#开头的行写入到file中 

 r                                      ##整合文件

tac ##将文件反向输出

sed '/1/rlinux' westos  ##将linux内容 整合到westos的第一行后

 sed 's@/@####@g' -i  westos   ##把sed处理的内容保存到westos文件中


字符替换

sed 's/sbin/westos/g' passwd
sed 's/:/  /g' passwd
sed 's/:/  /' passwd
sed '1,5s/:/  /g' passwd
sed '/lp/,/halt/s/:/  /g' passwd
sed '$s/:/  /g' passwd sed 's/:/  /g' passwd
sed 's/:/  /g;s/sbin/westos/g' passwd
sed 's/:/  /g;s/\//##/g' passwd
sed 's/:/  /g;s@/@##@g' passwd

g 表示所有关键字的列,如果不写默认每行出现的第一列

 

将全文sbin替换成westos

 将全文的:替换成空格

  将第一列的:替换成空格

  将1-5行的:替换成空格

 将lp到halt字符之间的:替换成空格

 将最后一行的:替换成空格 

 将全文的:替换成空格并且把全文的sbin换成westos

 将全文的:替换成空格并且把全文的/换成##

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

 

3.awk 

逐行读取文本,默认以空格为分隔府进行分隔

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

NR                       #行数
NF                        #列数
FILENAME         #文件名称本身
westos                 #westos变量值
“westos”               #westos字符串
BEGIN                 ##运行处理策略之前做的动作

END                    ##处理结束所作的事情

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

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

 

awk -F : 'BEGIN{print "westos"}{print $2}END{print "end"}' passwd  ## 开始先输出westos之后逐次输出每行的第二列 处理完所有的行之后打印end
awk -F : 'BEGIN{N=0}{N++}END{print N}' passwd  ##设定N=0,每处理一行N+1,之后打印N值

awk -F : 'BEGIN{N=0}/bash/{N++}END{print N}' passwd  ## 显示出现bash的行号
awk -F : 'BEGIN{N=0}/bash/{N++;print $7}END{print N}' passwd ##显示出现bash的行号并输出第七列
awk -F : 'BEGIN{N=0}/bash/{N++;print $0}END{print N}' passwd ##显示出现bash的行号并输出整行

awk -F : 'BEGIN{N=0}!/bash/{N++;print $0}END{print N}' passwd  ##显示没有bash字符的所有行

 awk -F : 'BEGIN{N=0}/bash|nologin/{N++;print $0}END{print N}' passwd ##显示出现bash或者nologin的所有行

awk -F : 'BEGIN{N=0}/^root/&&/bash$/{N++;print $0}END{print N}' passwd ##显示以root开头,以bash结尾的所有行

awk -F : 'NR==1{print $0}' passwd  ##输出第一行
awk -F : 'NR==2{print $0}' passwd
awk -F : '{print NR}' passwd          ##输出所有行的行数

awk -F : '{print NF}' passwd ##输出列数

 

 awk -F : 'BEGIN{WESTOS=1}{print "WESTOS"}' passwd ##每行都输出WESTOS

awk -F : '$7!~/bash/{print $0}' passwd ##输出第七列不是bash 的所有列

awk '{print "date"}' passwd | bash ##每行输出date 之后在bash中执行

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值