4.2文本处理工具

1.grep

grep [Globally search a Regular Expression and Print]
grep -E = egrep

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

grep root passwd过滤root关键字grep -i root passwd 过滤root关键字,并忽略大小写
grep -E "\<root" passwdroot字符之前不能有字符grep -E "root\>" passwdroot字符之后不能有字符
grep -数字显示过滤行以及上面几行和下面几行grep -n显示匹配的行所在行号
grep -A显示过滤行以及下面几行grep -B显示过滤行以及上面几行
grep -v反向过滤


grep字符数量匹配规则

^westos以westos开头westos$以westos结尾
w....sw开头s结尾中间4个任意字符.....ss结尾前面5个任意字符
*字符出现任意?0到1次
+1次到任意次{n}n次
{m,n}m-n次{0,n}0-n次
{,n}0-n次{m,}最少m次
(wl){2}wl出现两次(wl){2,}wl出现至少两次

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

grep -e sh$ -e bash $ /etc/passwd | cut -d : -f 1

 grep -E "bash$|sh$" /etc/passwd | cut -d : -f 1
 

 2.sed 

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

-n :只打印模式匹配的行

-e :直接在命令行模式上进行sed动作编辑,此为默认选项

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作

-r :支持扩展表达式

-i :直接修改文件内容
sed -n -f file passwd

cat file
5p

对字符的处理
 

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 '/^a/p' fstab        显示以a开头的行
d                            删除
sed 5d    westos             删除第五行
sed '/^a/d'    fstab         把a开头的行删除
sed '/^UUID/!d' fstab        除了UUID以外的行都删除
sed -e '5,$d' westos         删除第五行及以后
a                                    添加
sed -e '$a hello world' fstab        在最后一行添加hello world
sed -e '$a hello\nworld' fstab       在最后一行添加hello\nworld
sed -e '/^h/a hello world' fstab     在以h开头的行后添加 hello world
c                                   替换
sed -e '/^a/c hello world' fstab    以a开头的行替换成hello world   
sed '5chello world' westos          把第五行替换成hello world
w                把符合的行写到指定文件中
sed '/^UUID/w westofile' westos    把westos中UUID开头的行写入westosfile中
r                  整合文件
sed '5r haha' westos    把haha中的内容整合到westos的第5行

sed 字符替换

sed 's/:/###/g' westos    所有的行所有的列都替换
sed 's/:/###/' westos     所有的行的第一列替换
sed '1,5s/:/###/g' westos 
sed '1s/:/###/g' westos 
sed '1s/:/###/g;5s/:/###/g' westos 
sed '/lp/,/shutdown/s/:/###/g' westos 
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
#!/bin/bash

setenforce 0 &> /dev/null

[ -z "$1"] && {
        echo "Please input port number following script!!"
        exit
}

rpm -q httpd &> /dev/null || {
        echo "Error : Apache is not installed !!"
        exit
}

systemctl status httpd | grep "running" &> /dev/null || {
        echo "Error : Apache is not runing !!"
        exit
}

netstat -antlupe | grep -E ":$1\>" &> /dev/null && {
        echo "Eror : $1 is in used !!"
        exit
}

sed "/^Listen/cListen $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd

netstat -antlupe | grep http

3.awk

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

NR行数
NF列数
FILENAME文件名称本身
westoswestos变量值
"westos"westos字符串
          awk -F : 'BEGIN{print "name"}{print $1}END{print "end"}' /etc/passwd

          awk -F : '{print NR}' passwd
          awk -F : '{print FILENAME}' passwd            (结果为要处理文件的名称)

          awk -F : 'BEGIN{westos=1} {westos++} END{print westos}' passwd

          awk -F : 'END{print NR}' passwd        显示最后一行的行号
/bash$/   条件
/条件1|条件2/ 条件1或者条件2
/条件1/||/条件2/条件1或者条件2
/条件1/&&/条件2/ 条件1并且条件2
$0所有的列
$1第一列
$2第二列
$3第三列

#/etc/passwd文件的第六列没有home关键字并且以bash结尾的行
awk -F : '$6!~/home/&&/bash$/{print}' /etc/passwd

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

awk -F : 'BEGIN{N=0}$6!~/^\/home/&&/bash$|sh$/{N++}END{print N}' /etc/passwd

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值