shell文本处理工具

一. grep 

grep bash passwd                    ##过滤bash关键字
grep ^bash passwd                  ##以bash开头
grep bash$ passwd                 ##以bash结尾
grep -i bash passwd                ##后略大小写
grep -E "\<bash" passwd        ##bash字符之前不能有字符
grep -E "bash\>" passwd        ##bash字符之后不能有字符
grep -数字                              ##显示过滤行以及上面几行和下面几行
grep -n                                   ##显示匹配的行所在行号
grep -A                                   ##显示过滤行以及下面几行
grep -B                                  ##显示过滤行以及上面几行
grep -v                                  ##反向过滤

^westos               ##以westos开有
westos$              ##以westos结尾
w....s                   ##w开头s结尾中间4个任意字符
....s                     ##s结尾前面5个任意字符
*                         ##字符出现0到人一次
?                        ##0到1此
+                       ##1到任意此
{n}                    ##n此
{m,n}                ##m到n次
{0,n}                ##0-n次
{,n}                  ##0-n次
{m,}                ##最少m次
(lee){2}          ##lee字符串出现2次

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

二. sed

a) 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           ##显示以#开头的行

b) d##删除

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

c) a##添加

sed -e '$a hello world' fstab
sed -e '$a hello\nworld' fstab
sed -e '/^#/a hello world' fstab

d) c##替换

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

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

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

f) i##插入

sed '5ihello westos' westos

g) r##整合文件

sed '5r haha' westos

f)sed 字符替换

sed 's/:/###/g' westos                            ##将每一行第一个出现的:替换为###
sed 's/:/###/' westos                              ##将所有的:替换为###
sed '1,5s/:/###/g' westos                       ##将1到5行的:替换为###
sed '1s/:/###/g' westos                          ##将第一行的:替换为###
sed '1s/:/###/g;5s/:/###/g' westos         ##将第一行和第五行的:替换为###
sed '/lp/,/shutdown/s/:/###/g' westos    ##将lp到shutdown之间的:替换为###
sed 's/\//####/g' westos                        ##将所有的/替换为####
sed 's@/@####@g' westos                 ##将分隔符号用@代替,避免出现错误
sed 's@/@####@g' -i  westos             ##把sed处理的内容保存到westos文件中

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

三. awk

awk -F 分隔符(默认不加F的情况下,分隔符为空格)BEGIN{}{}END{} FILENAME
NR         ## 行数
NF         ## 列数
FILENAME   ## 文件名称本身
test        ## test变量值
"test"      ## test字符串
 
/bash$/                   ## 条件
/条件1|条件2/         ## 条件1或者条件2
/条件1/||/条件2/      ## 条件1或者条件2
/条件1/&&/条件2/   ## 条件1并且条件2
 
$0   ## 所有的列
$1   ## 第一列
$2   ## 第二列
$6   ## 第六列

ifconfig ens160 | awk '/inet\>/{ print $2 }'
ifconfig ens160 | awk '/inet\>/{ print $NF }'
ifconfig ens160 | awk '/inet\>/{ print $NR }'
ifconfig ens160 | awk 'BEGIN{N=0}/inet\>/{print $NF;N++}END{print N}'
课后练习
统计在系统中能 su 切换的并且用户加目录不在 / home 下的用户数量
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值