正则表达式和sed

一、正则表达式

主要用来匹配字符串(命令结果,文本内容)

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

1.元字符

.         匹配任意单个字符,可以是一个汉字  
[]        匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]   [[:alpha:]]    [0-9a-zA-Z]= [:alnum:]
[^]       匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] [a.z]
[:space:] 包括空格、制表符 (水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

2.表示次数

*  匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符  不包括0次     
\? 匹配其前面的字符出现0次或1次,即:可有可无
\+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\}  匹配前面的字符至多n次,<=n
\{n,\}  匹配前面的字符至少n次

注:如果是扩展正则表达式,不需要加转义字符\

例:

请添加图片描述

3.位置锚定

^  行首锚定, 用于模式的最左侧
$  行尾锚定,用于模式的最右侧
^PATTERN$  用于模式匹配整行 (单独一行  只有root)
^$  空行   
^[[:space:]]*$   空白行    tab   换行  回车

\<\b        词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
\>\b        词尾锚定,用于单词模式的右侧
\<PATTERN\>     匹配整个单词

例:

请添加图片描述

4.分组

分组:( ) 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, … 分组

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

例:

echo abccc |grep "abc\{3\}"
abccc

echo abcabcabc |grep "\(abc\)\{3\}"
#分组 匹配abc
abcabcabc

ifconfig ens33 |grep netmask|grep -Eo '([0-9]{1,3}.){4}'
192.168.91.100

请添加图片描述
请添加图片描述

二、sed

sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

sed原理

Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。

sed基本用法

sed格式

sed [选项]… “sed脚本” [输入文件]…

常用选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑[root@www data]#sed -n -e '/^r/p'  -e'/^b/p' /etc/passwd
-f FILE 从指定文件中读取编辑脚本
-r, -E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
sed脚本格式

sed脚本由’地址+命令’组成

1.命令

p:打印,如果是同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与“-n”选项一起使用。

d:删除,删除选定的行

a:增加,在当前行下面增加一行指定内容

i:插入,在指定行上面插入一行指定内容

c:替换,将指定的行替换为指定内容(整行替换)

2.地址

1、不给地址,那么就是针对全文处理
2、单地址,表示#,指定的行,$表示最后一行,/pattter/:表示该模式能匹配到的每一行
3、地址范围:
#,# 从第几行到第几行
#,+#从第几行开始,往后加4行
/patter1/,/patter2/ 表示从第一个开始找,到第二个结束

请添加图片描述
请添加图片描述
3、步进:~
1~2:表示奇数行
2~2:表示偶数行
3~3:表示可以3的倍数行
在这里插入图片描述

4.分组后项引用
虽然sed是用来一行一行处理的,但是还是可以利用分组后项引用的办法来提取有相同标志的列

两种方式:①先匹配关键字的前后部分有什么特点,②找到关键字的特点,将整行用正则表达式采用分组表示

sed面试题
1.使用sed的分组后项引用来提取ip地址
sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
192.168.20.8
2.提取版本号

ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar

cat 11 | sed -rn 's/.*-([0-9.]+).jar/\1/p'

在这里插入图片描述

3.提取文件的权限

将11文件的权限0644提取出来

[root@localhost ~] stat 11
  文件:"11"
  大小:255       	块:8          IO 块:4096   普通文件
设备:fd00h/64768d	Inode:34738973    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:admin_home_t:s0
最近访问:2024-05-15 15:57:30.809345248 +0800
最近更改:2024-05-15 15:57:01.088115377 +0800
最近改动:2024-05-15 15:57:01.088115377 +0800
创建时间:-
[root@localhost ~] stat 11 | sed -rn 's/.*\(([0-9]+)\/.*/\1/p'
0644

*注:表示(和/原来的意思一定要加上转义字符*

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值