代码编织梦想

目录

正则表达式定义

基础正则表达式

扩展正则 :egrep = grep -E

元字符

通配符

grep(global search regular expressino and printing)使用

查找特定字符

中括号 [ ] 集合字符

行首符“^”与行尾字符“$

任意一个字符“.”与重复字符“*”

扩展正则表达式:egrep命令

正则表达式——邮箱查找

正则表达式——网站

正则——时间查找

正则——IP地址查找

练习 


正则表达式定义

正则表达式:regular expression,模块 re,按照某个正确的规则来表达某个规则,运用规则

正则表达式,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串。

正则表达式是由普通字符与元字符组成的文字模式。

正则表达式一般用于脚本编程与文本编辑器中。

eg:[root@kafka01 nginx]# cat error.log|egrep "2021/07/24"

可用于grep(过滤文本)、sed(查找替换文本)、awk(截取文本)、vim等

用处:1.用于帮助查找特定的内容

基础正则表达式

根据不同的严谨程度与功能:分为基本正则表达式与扩展正则表达式。

基础正则表达式是常用的正则表达式的最基础的部分。

在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,egrep 与 awk 支持扩展正则表达式。

扩展正则 egrep = grep -E

[root@kafka01 0724]# cat mobile_pthone.txt|grep -E "wuyifan|\byangqian\b"

htc lenove micsodte oneplus wuyifan wuyifan

sansung xiaomi redmi REDMI123 lizhichao wiyifan yangqian yangqianqian lichaochao

[root@kafka01 0724]# cat mobile_pthone.txt|egrep  "wuyifan|\byangqian\b"

htc lenove micsodte oneplus wuyifan wuyifan

sansung xiaomi redmi REDMI123 lizhichao wiyifan yangqian yangqianqian lichaochao

元字符

^$ --> 空行

.* -->任意字符

通配符

grepglobal search regular expressino and printing)使用

-c 显示匹配到的行数之和

-o 仅显示匹配本身

-v 显示非匹配,取反(一行)

-i 不区分大小写(一行)

-E 支持扩展表达式

-q 静默模式

-n 显示匹配到的行的行号

-A 2 显示匹配到的行的后2行

-B 2 显示匹配到的行的前2行

-C 2 显示匹配到的行的前后2行

-V 显示版本信息

查找特定字符

-n :表示显示行号

-i :表示不区分大小写

-v : 表示反方向查找

grep -n 'the' abc.txt  //查找有the的行,并显示出行号

grep -in ‘the’ abc.txt  //不区分大小写查找有the的行,并显示行号

如果是想查找不包含the的行,-vn选项即可:

[root@client ~]# grep -vn 'the' /etc/passwd

1:root:x:0:0:root:/root:/bin/bash

2:bin:x:1:1:bin:/bin:/sbin/nologin

3:daemon:x:2:2:daemon:/sbin:/sbin/nologin

...省略内容

中括号 [ ] 集合字符

当我们需要查找两个字符 “shirt” 和 “short” 这两个字符时,其中 i 和 o 都是相同的.

可以用 [ ]来匹配字符,[ ] 中不论有几个字符,都仅代表一个字符

[root@localhost ~]# grep -n 'sh[io]rt' /etc/passwd

查找包含重复单个字符“oo”

[root@localhost ~]# grep -n 'oo' /etc/passwd

 集合字符的反向选择可以通过“[^]”实现

在 /etc/passwd文本中查找“oo” 前面不是“w”的字符串

[root@localhost ~]# grep -n '[^w]oo' /etc/passwd

检索“oo”前面不存在大小写字母的字符串

[root@localhost ~]# grep -n '[^a-zA-Z]oo' /etc/passwd

查找包含数字的行

[root@localhost ~]# grep -n '[0-9]' /etc/passwd

行首符“^”与行尾字符“$

查找以the这个字符串开头的行

[root@localhost ~]# grep -n '^the' abc. txt

查找以小写字母开头的行

[root@localhost ~]# grep -n '^[a-z]' abc.txt 

查找以大写字母开头的行

[root@localhost ~]# grep -n [A-Z]' abc.txt

查找以不是字母开头的行

[root@localhost ~]# grep -n '^[^a-zA-Z]' abc.txt

查询以点(.)结尾的行

[root@localhost ~]# grep -n '\.$' /etc/passwd

    // 这里的.不作为元字符使用,可加上转义符 \

查看空白行的行号

[root@localhost ~]# grep -n '^$' /etc/passwd

任意一个字符“.”与重复字符“*”

在正则表达式中小数点(.)也是一个元字符,代表任意一个字符

*代表的是重复零个或多个前面的单字符

查找以 w 开头 d 结尾,共有四个字符的字符串

[root@localhost ~]# grep -n 'w..d' /etc/passwd

要查询 wood、woood、woooood 等资料,则需要使用星号(*)元字符

[root@localhost ~]# grep –n 'o*' /etc/passwd 'o的数量是0到多个'

查询包含至少两个 o 以上的字符串

[root@localhost ~]# grep –n'ooo*' /etc/passwd  'o的数量是2到多个'

查询以 w 开头 d 结尾,中间的字符可有可无的字符串

[root@localhost ~]# grep –n'w.*d' /etc/passwd

查询任意数字所在行

[root@localhost ~]# grep –n'[0-9][0-9]*' /etc/passwd

连续字符范围“{}”

因为“{}”在 Shell 中具有特殊意义,所以在使用“{}”字符时,需要利用转义字符“\”,将“{}”字符转换成普通字符

查询两个 o 的字符

[root@localhost ~]# grep -n 'o\{2\}' /etc/passwd '2表示两个o'

查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,5\}d' /etc/passwd

查询以 w 开头以 d 结尾,中间包含 2 以上 o 的字符串

[root@localhost ~]# grep -n 'wo\{2,\}d' /etc/passwd

扩展正则表达式:egrep命令

使用基础正则表达式查询除文件中空白行与行首为“#” 之外的行(通常用于查看生效的配置文件)

grep –v '^$' test.txt | grep –v '^#'

使用扩展正则表达式

egrep –v '^$|^#' test.txt                '单引号内的管道符号表示或者(or)'

正则表达式——邮箱查找

字符串@字符串.com

cat mail.txt |egrep -o "[0-Z_]+@[0-Z]+\.[a-z]+"

正则表达式——网站

http://

https://

ftp://

规律:字符串://字符串.字符串.字符串

正则:[a-z]+://[a+z]+\.[a-z]\.[a-z]+ --> [a-z]+://([a+z]+\.){2}\.[a-z]+[a-z]+://[a+z]+\.[0-z]\.[a-z]+

正则——时间查找

egrep  -o "24/jul/2021:16:35:([0-9]|[0-5][0-9])"

正则——IP地址查找

A:0-126

B:128~191

C:192~223

[1-9]|[1-9][0-9]|1[01][0-9]|12[0-6]"  -->1-126

[0-9]|[1-9][0-9]|[1][0-9][0-9]|2[0-4][0-9]|25[0-5]  -->0-255

"\b([1-9]|[1-9][0-9]|1[01][0-9]|12[0-6])(\.([0-9]|[1-9][0-9]|[1][0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\b"

练习 

cat passwd|egrep "^ftp|^mail"

cat passwd|egrep -v "^r|^m|^f"

cat passwd|egrep "bash$"

cat /var/log/messages|grep "\b[a-Z]\{16\}\b"

cat /etc/login.defs|grep -v "^$|^#"

cat passwd|grep -v "^liu|^bash"

cat /etc/ssh/sshd_config|grep -v "^$" |grep -v "^#"

cat /etc/ssh/sshd_config|grep "\b[0-9]\{2\}\b"

cat passwd|grep "[^0-z]"

cat passwd|grep -v "[0-9]"

#!/bin/bash

#生成密码的所有字符
char="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789<>+-{}:.&;"

#统计char的长度
len=${#char}

#定义一个数组,存储最后生成的密码
array=()

n=0

while true
do
    #存储每次生成的密码
    pass=''
    #12位密码,循环12次
    for i in {1..12}
    do
        #每次生成一个随机数,对len取余,确保不会超过char的长度
        index=$[RANDOM%len]
        #取出char里下标为index的字符
        pass=$pass${char:$index:1}
    done

    #确保生成的密码里有四种字符
    if echo $pass |grep -q "[a-z]" && echo $pass |grep -q "[A-Z]" && echo $pass |grep -q "[0-9]" && echo $pass |grep -q "[\<\>\+\-\{\}\:\.\&\;]";then
        #判断是否有生成相同的密码
        if echo ${array[*]} |grep "$pass";then
            continue
        else
            #把密码存到数组里
            array[$n]=$pass
            n=$(($n+1))
        fi
    else
        continue
    fi
    
    #当数组里的个数为10时,退出循环
    if ((${#array[@]}==10));then
        break
    fi
done

echo ${array[@]}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/REPCHAOCHAO/article/details/119793849

linux菜鸟笔记——正则表达式语法_fang-的博客-爱代码爱编程_linux正则表达式语法

普通字符 普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号。   非打印字符 非打印字符也可以是正则表达式的组成部分。下表列出了表示非打印字符的转义序列: 字符 描述 \cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必

linux基础知识系统学习.no25——正则表达式、字符截取方法与命令_starfoxin的博客-爱代码爱编程_linux正则表达式截取报文

11.5.正则表达式 11.5.1.正则表达式方法 11.5.1.1.表达式概念 正则表达式是用于描述字符排列和匹配模式的一种语法规则,它主要是用于字符串的模式分割、匹配、查找以及替换工作。主要就做模糊匹配工作。 1

linux——正则表达式在linux中的应用(1)-爱代码爱编程

我们如果想要在某一个文本中搜寻相关字符,使用grep就能做到,如下图所示。 ”^“&"$" 由上面可知,所有test都被匹配到。在正则表达式中,如果我们只想匹配以test作为开头的行数,可使用”^“。想要匹配以test作为结尾的行,可以使用”$“,如果是想要该行只有test,可以同时使用”^“和”$“,如下所示。 如果直接使用”^$“,

linux——正则表达式在linux中的应用(2):连续匹配的次数-爱代码爱编程

上一篇主要总结跟”位置匹配“相关的正则,即词首词尾,行首行尾。 这一篇来总结”连续匹配的次数“。 如果要匹配a,或者aa,我们可以用如下方式。 但是如果要匹配多个a,全部写出来是一个非常麻烦的事。 相关字符\{n\},相关字符\{n,m\}, 相关字符\{,n\} ,相关字符\{n,\} 如果匹配多个连续字符,可以用\{, \} 来限定个数。

linux——正则表达式在linux中的应用(3):常用符号-爱代码爱编程

我们在连续匹配中提到:用“.”来表示任意字符。如下所示: 如上,我们发现“a aa”被匹配了,因为“.”不仅可以匹配字符,还能匹配空格,后面“ab a”被匹配到也是同理。 如果我们想要只单单匹配到字母,可以用[[:alpha:]] [[:alpha:]] & [[:lower:]] & [[:upper:]] 可分表表示 任意字母

linux——正则表达式在linux中的应用(4):分组与后向引用-爱代码爱编程

我们在字符的连续匹配中使用过"abc\{1,3\}",最后得到的匹配的结果有abc,abcc,即c重复一次两次三次都能匹配到,但是如果需要匹配的是重复的abc这一个整个字符时,我们就需要分组,将abc作为一个整体,示例如下: \( \) 如上可知利用" \( " 和“ \) ” 将abc变成一个整体。 后向引用:表示在引用整个正则中分组中所匹配到的

linux——正则表达式在linux中的应用(5):转义符与单双引号区别-爱代码爱编程

在前文中我们提到“.”可以代表任意字符,但是如果我们就是要匹配“.”这个点本身,我们可以使用转义字符“\”。 同理,要匹配“*”字符本身也需要加转义符。 但是对于“\?”,我们知道这个代表前面字符出现至多一次,如果我们想要匹配问号本身的话,直接用“?”就好。“\+”同理。 如果要引用“\”本身的话在前面可以加转义符。注意此处使用单引号。

linux——正则表达式在linux中的应用(6):基本正则表达式小结与扩展正则表达式-爱代码爱编程

1.常用符号 . 表示任意单个字符* 表示前面的字符连续出现任意次,包括0次.*表示任意长度的任意字符,与通配符中*的意思相同\表示转义符,当与正则表达式中的符合结合时表示符号本身[ ]表示匹配指定范围内的任意单个字符[^ ]表示匹配指定范围外的任意单个字符   2.单个字符匹配相关 [[:alpha:]] ,[a-zA-Z]表示任意大小写字母[[:

Linux日志查找——正则表达式-爱代码爱编程

文章目录 基础文件内容一行以xx开头 ^一行以xx结尾 $只包含xx一个单词 ^ $空行 ^$词首 \\< 或 \b词尾 \\> 或 \b独立单词 \\< \\>非单词边界 \B连续次数匹配文件内容连续n个字符 \\{ \\}只出现n次的字符 \\< \{ \}\\>出现的次数在x与y之间 \\{x,y\\}至少

鸟哥的Linux私房菜——正则表达式-爱代码爱编程

正则表达式 正则表达式可以说是非常重要了,已经为值得单独学习的一个知识点,不过正则涉及到的知识点很多,这里只提到常用的一些,如果想了解更多,可以去专门学习正则的网址学习。常用语法 1.语系的影响: 不同语系的编码规则不一样,在使用诸如[a-z]时就会产生歧义,所以要注意当前所使用的编码规则。 为了更好的统一,提出了一些特殊符号: [:alnum:]:代表英

Linux ——正则表达式过滤(以北京监测网站为例)-爱代码爱编程

Linux ——正则表达式过滤(以北京监测网站为例) 一、实验内容 从因特网上搜索Web页,用wget获取网页,处理网页html文本数据,从中提取出当前时间点北京各监测站的PM2.5浓度,输出如下CSV格式数据: 2020-03-09 13:00:00,海淀区万柳,73 2020-03-09 13:00:00,昌平镇,67 2020-03-09 13:

Linux shell脚本——正则表达式-爱代码爱编程

01 正则表达式 1 字符类 . ——匹配任意一个字符,如cod.可以匹配cod1、code等 [] ——匹配括号中的任意一个字符,如[abc]d可以匹配ad、bd、cd等 - ——在[]内表示字符范围(仅在中括号内有效),如[a-z]表示所有的小写字母 ^ ——位于[]括号内的开头,匹配除括号中的字符之外的任意一个字符, 2

shell脚本——正则表达式-爱代码爱编程

正则表达式 正则表达式的作用正则当中名词解释第一类正则表达式正则中普通常用的元字符案例正则中其他常用元字符案例扩展类正则常用元字符案例第二类正则应用案例过滤ip地址脚本总结一下 正则表达式的作用 正则表达式是一种字符模式,用于在查找过程中匹配指定的字符。 正则当中名词解释 元字符 指那些在正则表达式中具有特殊意义的专用字符,如:点(.)

自动化运维必须要学的Shell脚本之——正则表达式的详解-爱代码爱编程

正则表达式 一、正则表达式1.1 什么是正则表达式1.2 基础正则常见元字符1.2.1 正则表达式的组成1.2.2 常见的元字符(支持的工具:grep、egrep、sed和awk)1.2.3 扩展正则表达式元字符(支持的工具:egrep、awk) 一、正则表达式 1.1 什么是正则表达式 正则表达式(regular expression)描

shell——正则表达式-爱代码爱编程

目录 一.正则表达式定义 1.正则表达式的组成 2.基本正则表达式元字符 3.扩展正则表达式元字符 4.表示次数 1.常用选项 2.提取IP地址 3.其他示例 5.位置锚定 1.常用选项 2.实例 6.分组或其他 二.sort排序 三.uniq去重 四.tr转换 五. cut 一.正则表达式定义 1.正则表达式的组成