Liunx shell编程及自动化运维实现--第五章三剑客

一、正则表达式

正则表达式(RE)是一种字符模式,用于再查找过程中匹配指定的字符,在大多数程序中,正则表达式都被置于两个正斜杠之间:例如//就是由正斜杠界定的正则表达式,他将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符时最重要的概念。

元字符

定义:元字符是这样的一类字符,他们表达的是不同于字面本身的含义

分类:基本正则表达式字符和扩展正则表达式字符

基本正则表达式字符

^        行首定位符
$        行尾定位符
.          点,匹配任意单个字符
*        匹配前导符0到多次

.*

任意多个字符
[] 匹配指定范围的一个字符
[-] 匹配指定范围的一个字符,连续的范围
[^]

匹配不在指定组内的字符

Liunx shell编程及自动化运维实现--第五章三剑客_第1张图片

\

用来转义元字符(‘’  “”  \  ),脱义符

Liunx shell编程及自动化运维实现--第五章三剑客_第2张图片

\<

词首定位符

\> 词尾定位符
()

\(\)   匹配稍后使用的字符的标签

:3,9 s/\(.*)/#\1/   加注释

:3,9 s/\(#\)\(.*)/\2\1/   将#号移到最后

s替换   \原来\现在\

x\{m\}

字符x重复出现m次

Liunx shell编程及自动化运维实现--第五章三剑客_第3张图片

x\{m,\} 字符x重复出现m次以上
x\{m,n\} 字符x重复出现m次到n次

扩展正则表达式字符

+

匹配1-n个前导字符

Liunx shell编程及自动化运维实现--第五章三剑客_第4张图片

匹配0-1个前导字符

a|b

匹配a或b

Liunx shell编程及自动化运维实现--第五章三剑客_第5张图片

()

组字符

Liunx shell编程及自动化运维实现--第五章三剑客_第6张图片

示例1:

Liunx shell编程及自动化运维实现--第五章三剑客_第7张图片

示例2:

Liunx shell编程及自动化运维实现--第五章三剑客_第8张图片

二、grep

过滤,查找文件中的内容

分类:grep,egrep和fgrep

返回值:

  • 0   是找到了
  • 1   是没有
  • 2找的地方不对

示范:

Liunx shell编程及自动化运维实现--第五章三剑客_第9张图片

参数:

Liunx shell编程及自动化运维实现--第五章三剑客_第10张图片

练习

Liunx shell编程及自动化运维实现--第五章三剑客_第11张图片

三、sed(逐行处理模式)

1.前言

sed,流编辑器,StreamEditor,sed是一种在线的,非交互式的编辑器,他一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区,成为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送至屏幕。接着处理下一行,这样不断重复,指导文件末尾,文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作。

2.格式

  1. sed  选项   命令   文件
  2. sed  选项  -f   脚本文件

3.返回值

都是0,对错不管

只有当命令存在语法错误时,sed的退出状态才是非0

4.sed和正则表达式

与grep一样,sed在文件中查找模式是也可以使用正则表达式(RE)和各种元字符。正则表达式是括在斜杠间的模式,用于查找和替换,以下是sed支持的元字符

  • 使用基本元字符集    ^,$,.,*,[],[^],\<,\>,\(\),
  • 使用扩展元字符集    ?,+,|,()
  • 使用扩展元字符的方式    \+ 转义    sed  -r   加-r       -i是写入

5.汇总示例

删除命令:d Liunx shell编程及自动化运维实现--第五章三剑客_第12张图片
替换命令:s Liunx shell编程及自动化运维实现--第五章三剑客_第13张图片
读文件命令:r Liunx shell编程及自动化运维实现--第五章三剑客_第14张图片
写文件命令:w(另存为) Liunx shell编程及自动化运维实现--第五章三剑客_第15张图片
追加命令:a(之后)

Liunx shell编程及自动化运维实现--第五章三剑客_第16张图片

插入命令:i(之前) 与a相反,i插入到行前
替换整行命令:c Liunx shell编程及自动化运维实现--第五章三剑客_第17张图片
获取下一行命令:n
反向选择:!
多重编辑:e

在一条命令中发布多条指令

Liunx shell编程及自动化运维实现--第五章三剑客_第18张图片

一行针对多条命令一定要用括号括起来

sed  -r    '/root/{n:d}'  passwd

6.实战案例

1.删除配置文件中的#号注释行

sed   -r    '/^#/d'   /etc/sanba/smb.conf

2.修改文件

 sed -ri  '$a\chroot_local_user=YES' /etc/vsftpd/vsftpd.conf

 sed -ri  '/^SELINUX=/c  SELINUX=disabled' /etc/selinux/config

3.给文件行添加注释

sed -r  '2,6s/^/#/' a.txt

sed -r  '2,6s/(.*)/#\1/'  a.txt

sed -r  '2,6s/.*/#&/'   a.txt

4.sed中使用外部变量

准备工作   var1=11111

追加变量   

Liunx shell编程及自动化运维实现--第五章三剑客_第19张图片

巧合

四、awk

1.前言

        awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理,数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,
awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕)。

2.工作原理

Liunx shell编程及自动化运维实现--第五章三剑客_第20张图片

3.语法

awk    [options]    'command'    filenames(推荐)

==options 例如:-F 定义输入字段分隔符,默认的分隔符是空格或制表符(tab)

==command(时空):

  • BEGIN{}         begin发生在行处理前(注意大写) 
  • {}                    行处理时,读一次执行一次 (现在)
  • END{}             行处理后

示例

awk  'BSGIN{print 1/2}  {print "OK"}  END{print "-------------"}'    /etc/hosts

awk  'BSGIN{print 1/2}{print "OK";print $0}END{print "hoho"}'    /etc/hosts

4.内部变量

FS

输入字段分隔符

(默认空格

awk -F:'print $1, $3' /etc/passwd | head -1

awk -F‘[:\t]’ {print $1,$2,$3} /etc/passwd

awk ‘BEGIN{FS=":"} {print $1,$3}’  /etc/passwd

OFS 输出字段分隔符 awk ‘BEGIN{FS=":";OFS="---"} {print $1,$3}’  /etc/passwd
RS 输入记录(行)分隔符,默认换行符 Liunx shell编程及自动化运维实现--第五章三剑客_第21张图片
ORS 输出记录(行)分隔符,默认换行符
FNR 多文件独立编号 Liunx shell编程及自动化运维实现--第五章三剑客_第22张图片
NR 多文件汇总编号 Liunx shell编程及自动化运维实现--第五章三剑客_第23张图片
NF 字段总数 Liunx shell编程及自动化运维实现--第五章三剑客_第24张图片

5.模式化输出

print(函数)

Liunx shell编程及自动化运维实现--第五章三剑客_第25张图片

6.模式(正则表达)和动作

1.前言

        任何awk语句都由模式和动作组成。模式部分决定动作语句何时触发及触发事件如果省略模式部分,动作将时刻保持执行状态。每一行都会有动作。模式可以是任何条件语句或复合语句或正则表达式。有模式的话,就是对模式对应的行进行动作

2.字符串比较

awk  '/^root/   /etc/passwd         //是正则匹配

awk  '$0 ~ /^root/  /etc/passwd    ~像

awk '$0! ~ /^root/'  /etc/passwd

awk  -F;'$1~ /^root/'  /etc/passwd

3.数值比较

        比较表达式采用对文本进行比较,只有当条件为真,才执行指定的动作。比较表达式使用关系运算符,用于比较数字与字符串

关系运算符

Liunx shell编程及自动化运维实现--第五章三剑客_第26张图片

算数,运算

4.多条件

逻辑操作符和复合模式

Liunx shell编程及自动化运维实现--第五章三剑客_第27张图片

范围模式

Liunx shell编程及自动化运维实现--第五章三剑客_第28张图片

7.awk脚本编程

1.变量

awk调用变量

>1自定义内部变量  -v

awk  -v  user=root   -F: '$1==user'  /etc/passwd      -v定义变量

>2外部变量“ ‘ ”

双引号

Liunx shell编程及自动化运维实现--第五章三剑客_第29张图片

单引号

Liunx shell编程及自动化运维实现--第五章三剑客_第30张图片

2.条件&判断

if语句

        格式: {if(表达式){语句;语句;...} }

        示例:需求 :如果$3是0,就说他是管理员
                  awk -F: '{if($3==0) {print $1 " is administrator."}}'  /etc/passwd

if..else语句

        格式:{if(表达式){语句;语句;...} else {语句;语句;...}}

        示例: awk -F: {if($3==0) {print $1"是管理员“} else { print  $1"普通用户" }}’  passwd

if..else if..else语句

Liunx shell编程及自动化运维实现--第五章三剑客_第31张图片

3.循环

while

for

4.数组

定义数组

索引遍历    for(i  in  username)  username加[]i是值,不加i是索引

Liunx shell编程及自动化运维实现--第五章三剑客_第32张图片

5.awk编程案例-统计/etc/passwd中各种类型shell的数量

8.一问一答

Liunx shell编程及自动化运维实现--第五章三剑客_第33张图片

你可能感兴趣的:(自动化,运维)