linux 【完结篇】第六章 shell编程及自动化运维--三剑客

Sed是一种在线的,非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”。接着Ssed命令处理缓冲区中的内容处理完成后。把缓冲区的内容送往屏幕,接着处理下一行。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件;简化对文件的反复操作。awk是一种编程语言,用于在Linux/Unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件、或其他命令的输出。
摘要由CSDN通过智能技术生成

linux 第六章 shell编程及自动化运维–三剑客

一、正则表达式

1、前言

名词解释:

正则表达式是一种字符模式,用于在查找过程中匹配指定的字符。在大多数程序里,正则表达式都被置于2个正斜杠之间:例如/I[oO]ve/就是正斜杠界定的正则表达式,它将匹配被查找的行中任何位置出现的相同模式。在正则表达式中,元字符是最重要的概念。

正则能被哪些工具用到: vim、sed、awk、grep

适用场景: mysql、oracle、PHP、python、Apache、Nginx…需要正则

2、元字符

定义: 原字符是这样一类字符。他们代表的是不同于字面本身的含义。

分类:

基本正则表达式元字符:

^:行首定位符

搜索以root开头的。

[root@localhost] grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost] grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash

$:行尾定位符。

给我搜一下Love结尾的,作为行的末端的文字

[root@localhost] grep love 1.txt 
i love you 
love you
love
[root@localhost] grep love$ 1.txt 
love

. :匹配任意单个字符。

[root@localhost] grep abc 1.txt 
abc
[root@localhost] grep adc 1.txt 
adc
[root@localhost] grep a.c 1.txt 
abc
adc

*:匹配前导0多次

[root@localhost] cat 1.txt 
lve
love
loove
loooove
loobbe
lo333ve
[root@localhost] grep lo*ve 1.txt   #匹配0到多个o最后以ve结尾
lve
love
loove
loooove
[root@localhost] cat 1.txt 
a
ab
abc
abcd
abcde
abcdef
[root@localhost] grep abc 1.txt
abc
abcd
abcde
abcdef
[root@localhost] grep abc* 1.txt
ab
abc
abcd
abcde
abcdef

.*:任意多个字符

[root@localhost] cat 1.txt 
lve
love
loove
loooove
loobbe
lo333ve
[root@localhost] grep lo3.* 1.txt 
lo333ve
[root@localhost] grep lo.*be 1.txt 
loobbe

[ ]:匹配指定范围内的一个字符

[root@localhost] cat 1.txt 
love
Love
1ove
iove
[root@localhost] grep [lL]ove  1.txt 
love
Love

[-]:匹配指定范围内的一个字符,连续的范围

[root@localhost] cat 1.txt 
love
Love
1ove
iove
[root@localhost] grep [0-9] 1.txt 
1ove
[root@localhost] grep [a-z]ove 1.txt 
love
iove

[^]:匹配不在指定组内的字符

[root@localhost] cat 1.txt 
love
Love
1ove
iove
[root@localhost] grep [^a-z] 1.txt 
Love
1ove
[root@localhost] grep [^0-9]ove 1.txt 
love
Love
iove

\:用来转义元字符(’ ’ ” “ \)

[root@localhost] cat 1.txt 
love
Love
1ove
iove
.ove
[root@localhost] grep "\." 1.txt 
.ove
[root@localhost] grep "\.ove" 1.txt 
.ove

[root@localhost]  ./configure \
> --with-user=www  \
> 

\ <:词首定位符

[root@localhost] cat 1.txt 
i love you
a love b
iloveyou
[root@localhost] grep "\<love" 1.txt 
i love you
a love b
[root@localhost] cat 1.txt 
i loveyou
loveyou
[root@localhost] grep "\<love" 1.txt 
i loveyou
loveyou
[root@localhost] grep "^love" 1.txt 
loveyou

\ >:词尾定位符

[root@localhost] cat 1.txt
i youlove
you  love
[root@localhost] grep "love\>" 1.txt 
i youlove
you  love

():\ (…\ )

vim 1.txt

: 3,9  s/\(.*\)/a\1/         #、\1代表调用前方的括号,每一行前面多个a,但是()会被误解所以加转义符\,做种意思就是3到9行加个a
vim 1.txt

: 3,9  s/\(a\)\(.*\)/\2\1/   #、把a放到每行的句尾

: 3,9  s/\(.*\)\(#\)/\1/     #、句尾的a去掉

x\ {m\ }:字符x重复出现m次

[root@localhost] cat 1.txt
love
loove
looove
[root@localhost] grep "o\{3\}"  1.txt 
looove

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

[root@localhost] cat 1.txt
love
loove
looove
[root@localhost] grep "o\{1,\}"  1.txt    #一次以上 
love
loove
looove

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

[root@localhost] cat 1.txt
love
loove
looove
loooove
looooove
loooooove
[root@localhost] grep "o\{3,5\}"  1.txt 
looove
loooove
looooove
loooooove

扩展正则表达式元字符:

+:匹配1~n个前导字符

[root@localhost] cat 1.txt
lve
loove
looove
loooove
looooove
loooooove
[root@localhost] egrep lo+ve 1.txt 
loove
looove
loooove
looooove
loooooove
[root@localhost] egrep lo*ve 1.txt 
lve
loove
looove
loooove
looooove
loooooove

?:匹配0~1个前导字符

[root@localhost] cat 1.txt 
lve
love
loove
[root@localhost] egrep lo?ve 1.txt 
lve
love

a|b:匹配a或b

[root@localhost] cat 1.txt 
qwertyuiopsdfghjklxcvb
qwertyuiopasdfghjkmnbvc
nbvcxygfdqaeeryigygeus
awyiebgbfeygkcba

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dNEo2qRK-1673151923096)(C:\Users\hyb\AppData\Roaming\Typora\typora-user-images\image-20221228132319481.png)]

():组字符

[root@localhost] cat 1.txt 
rs
loyeable
lovers
[root@localhost] egrep  "love(able|rs)"  1.txt 
loveable
lovers

3、示例

^[A-Z]..$    #开头一个大写,最后2个任意字符

^[A-Z][a-z]*3[0-5]   #一个大写开头,0到多个小写或空格,包含3,最后是0到5的一个数字

[a-z]*\.    #0到多个小写字母,最后一个点

^ *[A-Z][a-z][a-z]$     # 0到多个空格开头,一个大写,一个小写,再一个小写结尾

^[A-Za-z]*[^,][A-Za-z]*$  #0到多个字母开头,文中无逗号,0到多个英文结尾

\
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@何永斌@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值