Linux正则表达式详解(进阶技能)

科技   2024-09-26 07:00   广东  

正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理操作,正则表达式通过一些特殊符号的辅助,可以让用户轻易完成查找、删除、替换某特定字符串的处理过程。

一、正则表达式与通配符的区别:

1、正则符号匹配的是文件内容信息。

2、通配符匹配的是文件名称信息。

二、系统特殊符号

1、美元符号:$

1)用于取出变量中的内容

# 获取字符编码
[root@localhost ~]echo $LANG
zh_CN.UTF-8
# 查看环境变量
[root@localhost ~]echo $PATH
/root/.local/bin:/root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/data/jdk1.8.0_421/bin

2)用于取出指定列的信息,在awk中常用

[root@localhost ~]awk -F ':' '{ print $4 }' /etc/passwd

3)表示用户命令提示符。超级用户为#,普通用户为$.

[root@localhost ~]# su - liyb
[liyb@localhost ~]$ 

4)表示一行的结尾

2、叹号符号:!

1)用于取反或者排除的意思。

2)用于强制操作处理:vim中强制保存退出,wq!,q!

3、竖线符号:|

1)表示管道符号,管道前面执行命令的结果,交给管道后面的命令执行。

[root@localhost ~]ps -ef |grep tomcat

2)经常配合xargs命令使用,将查找出的结果进行分组显示。

[root@localhost ~]# find  /   -name  "*.log"  | xargs rm -rf

4、井号:#

1)表示文件内容注释符号

2)超级用户命令提示符

5、引号符号

1)$():    表示命令执行结果留下,用于其他命令调用。

2)双引号:“”          --表示输入内容,就是输出内容,但是部分信息会被解析。

3)单引号:''           --表示输入即输出

4)反引号:``          --表示执行命令的结果留下,用于其他命令执行或调用

# 查看某个命令属于哪个软件包
[root@localhost ~]rpm -qf `which nslookup`
bind-utils-9.16.23-21.oe2203.x86_64

6、定向符号

1)小于符号:单个<     标准输入重定向符号     两个<<     标准输入追加重定向符号

2)大于符号:

单个>/2>         标准输出重定向符号/错误输出重定向符号  

>>/2>>             标准输出追加重定向/错误输出追加重定向符号

# 将挂载信息追加到fstab文件,使其开机自动挂载
[root@localhost ~]cat >> /etc/fstab <<EOF
/dev/vdb    /data    xfs  defaults  0 0
EOF



7、路径信息符号

1)单点符号:.     --表示当前目录

2)双点符号:..     --表示上级目录

[root@localhost data]# cd ..
[root@localhost /]

3)波浪符号:~         --表示用户家目录 超级用户家目录:/root 普通用户家目录:/home/用户名称

4)减号符号:-         --表示回到上次的目录,cd -

8、逻辑符号

1)并且符号:&&         --表示前面的命令执行成功,再执行后面的命令

[root@localhost ~]# systemctl start nginx && systemctl enable nginx

2)或者符号:|| --表示前面的名称执行失败,再执行后面的命令。若前面的命令执行成功,则不执行后面的命令。

三、基础正则符号和扩展正则符号。

1、基础正则符号:^ $ . * [] \

1)尖角符号:^     --表示匹配以什么字符开头的一行信息 ,^bak 表示匹配以bak开头的一行信息。

2)美元符号:$    $表示匹配以bak结尾的一行信息。

3)尖角+美元符号:^$         --表示过滤空行信息。

4)点号符号:.             --表示匹配任意一个且只有一个字符。

5)星号符号:*             --表示匹配前一个字符出现连续出现1次或0次以上

6)点星符号:.*             --表示匹配文件中所有信息(包括空行) 。

^.*xxx :表示从开头到什么字符为止的内容(贪婪匹配)
^xxx.*xxx$ :表示以什么开头到什么字符结尾的全部内容信息。

7)转义符号:\

  1. 将有特殊意义符号,转义成普通信息进行识别 .$   --表示匹配以.结尾的内容信息
  2. 将没有意义的信息转义为有特殊意义的信息 \n --换行 \t --制表符,相当于tab

8)中括号:[]             --表示匹配括号内的多个字符信息。

 [abc] 匹配包含a或b或c信息的内容

9)排除符号:[^]         --表示排除括号中的信息。

[^abc] 匹配排除包含a或b或c信息的其他内容

2、扩展正则符号:+ | () {} ?

1)加号符号:+        表示前一个字符连续出现了1次或多次以上。一般加号与中括号使用,可以匹配多个不同的连续字符

2)问号符号:?        表示前一个字符出现0次或1次

3)竖线符号:|             表示匹配多个满足条件的信息(或者) a|b|c 匹配出含有a或b或c内容的信息

4)小括号符号:()           1)表示匹配一个整体             (2)表示后向引用前项 (.*) \1 经常在sed中使用

5)大括号符号:{}            表示定义前面字符出现的次数

    {x} 表示前一个字符正好连续出现x次。
    {x,y} 表示前一个字符连续至少出现x次,最多出现y次。
    {x,} 表示前一个字符连续出现x次,最多无限次
    {,y} 表示前一个字符至少连续出现0次,最多y次。

3、注意事项

默认grep ,sed不能直接识别扩展正则符号,需要提升级别才可识别

grep   ---  egrep 或 grep -E 

sed   --- sed -r

示例:批量创建用户 lyb01..lyb10,并给每个用户设置密码信息,默认初始化密码(123456) 具体命令:


seq -w 10|sed -r 's#(.*)#useradd liyb\1;echo 123456|passwd --stdin lyb\1#g'


本篇关于正则表达式的知识分享完结!感谢你的阅读,如果有错误之处,敬请指出;如果觉得还OK,欢迎点赞 ;关注 ; 收藏 ; 私信;一起成长!!

运维李哥不背锅
专注于各种运维技术、,分享Linux基础知识,服务器,数据库,云原生和网络安全等相关技术,各种进阶知识等着你,助你成为技术达人!
 最新文章