linux系统中shell的正则表达式

shell的正则表达式

一.grep

1.grep:文本过滤命令:是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行 ;

由正则表达式或者字符及基本文本字符所编写的过滤条件 。

grep格式
参数
grep    root  passwd       模糊匹配(贪婪模式只要有)
grep    ^root  passwd      以root开头的行
grep    root$  passwd      以root结尾的行
grep -i root  passwd       忽略大小写
grep -E root  passwd       -E扩展正则表达式

示例:

这里写图片描述

grep root passwd              匹配root字符
grep -E "root\>" passwd
grep -E "\<root\>" passwd     匹配以root开头以root结尾的字符段
grep -E "^\<root\>" passwd    匹配以root开有的行
grep -E "\<root\>$" passwd    匹配以root结尾的行
grep -E -i "\<root\>" passwd  -i表示忽略大小写

示例:

这里写图片描述

3.匹配字符出现次数

grep中的正则表达式
grep -E "x.." westos      匹配x后面两位的
grep -E "x..\>" westos    匹配x后面两位的,从后往前匹配
grep -E "\<x..\>" westos  匹配x后面仅有两位的,前面没有后面也没有

这里写图片描述

grep中字符的匹配次数设定
*    字符出现0-任意次
\?   字符出现0-1次
\{n\} 字符出现n次

示例:

grep -E "x*y" file       匹配x出现任意次
grep -E "x?y" file       匹配x出现0-1grep -E "\<x?y" file     匹配x最少出现0-1grep -E "\<x{2}y" file   匹配x出现2grep -E "\<x{,2}y" file  匹配x出现0-2grep -E "\<x{2,}y" file  匹配x出现2-任意次
grep -E "\<x+y" file     匹配x最少出现一次
grep -E "(xy)+" file     匹配xy最少出现一次
grep -E "(xy)+\>" file   匹配xy最少出现一次,从后往前匹配

这里写图片描述
这里写图片描述

脚本示例:

编辑脚本:vim  ip_show.sh  显示主机ip
内容:
#!/bin/bash
`ifconfig eth0 > /mnt/ip_file`
grep -E "inet\ "  /mnt/ip_file | cut -d " " -f 10    

执行结果:

这里写图片描述

二.sed 行编辑器

1. sed:用来操作纯 ASCII 码的文本

sed处理原理:处理时 , 把当前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行,sed 符合模式条件的处理不符合条件的不予处理处理完成之后把缓冲区的内容送往屏幕接着处理下一行 , 这样不断重复 , 直到文件末尾 。

2. Sed 处理模式

sed 对字符的处理的模式:
p     显示
d     删除
a     添加
c     替换
w     写入
i     插入

(1).p模式操作:显示

sed  -n  '/#/p'     显示有#号的行
sed  -n  '/UUID/p'  显示有UUID的行
sed  -n  '/^UUID/p' 显示以UUID开头的行
sed  -n  '/UUID$/p' 显示以UUID结尾的行
sed  -n  '2,5p'     显示2-5行
sed  -n  '2,5!p'    显示除了2-5行的行
cat  -n  fstab  | sed -ne '3p;5p;6p'   显示3.5.6

示例:

这里写图片描述

(2).d模式操作: 删除

sed '/UUID/d'    删掉UUID的行
sed '/^UUID/d'   删掉以UUID开头的行
sed '/UUID$/d'   删掉以UUID结尾的行
sed '1,4d' fstab 删掉1-4

示例:

这里写图片描述

(3).a模式操作:添加

sed '/UUID$/a hello\n www'   在以UUID结尾的行后面添加

示例:

这里写图片描述

(4).i模式操作:保存到原文件

sed '/UUID$/s/jdkldmc=UUID/dkldmc=UUIDhello/' -i fstab 
替换(s表示替换,-i表示写入原文件)

示例:

这里写图片描述

(5).w模式操作:写入

sed '/^UUID/w   www'  fstab    
sed -n '/^UUID/w  www'  fstab  把fstab文件中UUID开头的行写入到www文件中

sed '/^UUID/='  fstab     显示UUID的行的行号
sed '1r hello'  fstab    把hello文件的第一行写入到fstab文件的第一行
sed '$r hello'  fstab    把hello文件的最后一行写入到fstab文件的最后一行

示例:

这里写图片描述
这里写图片描述
这里写图片描述

(6).c模式:替换

sed '/^UUID/c hello' fstab    将以UUID开有的行替换成hello

示例:

这里写图片描述

(7).sed其他用法

sed -n '/^UUID/='  fstab     显示fstab文件的UUID行号
sed -n -e '/^UUID/p' -e '/^UUID/='  fstab   
把fstab文件的UUID行打印出来并显示行号
sed 'G'  fstab     给每行后面加行空格
sed '$!G' fstab    给每行后面加行空格,除了最后以行
sed '='  fstab  | sed 'N;s/\n/ /'   给每一行前面加入行号
sed -n '$p' fstab                   显示最后一行

示例:

这里写图片描述
这里写图片描述

脚本示例:

编辑脚本:vim  changehttp_port.sh    更改httpd服务的端口
内容:
#!/bin/bash
[ -z "$1" ] && {
        echo Error:plrese give me a num for http port!
        exit 1
}
sed "/^Listen/c Listen\ $1" -i /etc/httpd/conf/httpd.conf
systemctl restart httpd

执行脚本结果:

这里写图片描述

三.awk 报告生成器

1.awk处理机制: awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式上分别体现如下 :

BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作

{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令

END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果

2. awk 基本用法

awk -F : 'BEGIN{print "NAME"}'  passwd      动作执行前打印NAME
awk -F : 'BEGIN{print "NAME"}{print $1}' passwd   打印第一列
awk -F : '/bash$/{print $1}' passwd       打印以bash结尾的第一列
-F  表示以什么为分隔符
awk -F : 'NR==3'  passwd      以:为分隔符打印第三行
awk -F : 'BEGIN{print "NAME"}NR<=3&&NR>=2{print $1}'  passwd
以:为分隔符,处理前打印NAME,打印2-3行的第一个字符

示例:

这里写图片描述

打印能登陆系统,且家目录时/home的用户个数:

awk -F : '$6~/^\/home/&&/bash$/{print $1}' /etc/passwd
以:为分隔符第六列以/home开头并且以/bash结尾的字符
awk -F : 'BEGIN{N=0}$6~/^\/home/&&/bash$/{N++}END{print N}' /etc/passwd
开始N=0,找到一个加一个,最后打印出总个数

这里写图片描述

打印设备eth0网卡的IP:

awk -F = '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
ifconfig eth0 | awk -F " " '/inet\ /{print $2}'

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值