正则系列-正则表达式——grep/egrep-熟练到精通

注意事项:正则符号都是英文

1. 符号 概述

正则表达式符号
基础正则^   $ .   *   .*   []    [^]
扩展正则

|    +    ()  {}   ?

其他类正则

2. 基础正则-grep/egrep 

  • 环境准备
I am teacher!
I teacher linux.
I like badminton ball,billiard ball and chinese chess!
my blog is https://51cto.com

my qq is 99999000111
not 4900000

my god ,i am not gril,but oldboy

2.1 ^   以……开头的行

  • 以I开头的行
$ grep '^I' re.txt

I am teacher!
I teacher linux.
I like badminton ball,billiard ball and chinese chess!

2.2 $ 以……结尾的行

  • 以数字1结尾的行
$ grep '1$' re.txt

my qq is 99999000111

  • 找出文件中以字母m结尾的行
cat -A 显示出文件中的特殊隐藏符号.

2.3 ^$ 空行,这行中没有任何字符

  • 过滤出文件中的空行并显示行号

  • 排除空行

应用建议:用于排除文件中的空行使用,排除空行和带#号的行。

2.4  . 任意一个字符  

  • oldb任意一个字符y

了解: . 过滤的时候排除空行.  点不会匹配空行

2.5 \撬棍 转义字符 脱掉马甲打回原形,去掉特殊符号的含义

  • 找出文件中以.(点)结尾的行
Administrator@SYS191022J0 MINGW64 /d/rgq/linux
$ cat -An re.txt
     1  $
     2  I am teacher!$
     3  I teacher linuxi.  $
     4  I like badminton ball,billiard ball and chinese chess!  $
     5  my blog is https://51cto.com  $
     6  $
     7  my qq is 99999000111.$
     8  not 4900000.$
     9  my god ,i am not gril,but oldboy  $
    10  $

Administrator@SYS191022J0 MINGW64 /d/rgq/linux
$ grep '.$' re.txt
I am teacher!
I teacher linuxi.
I like badminton ball,billiard ball and chinese chess!
my blog is https://51cto.com
my qq is 99999000111.
not 4900000.
my god ,i am not gril,but oldboy

Administrator@SYS191022J0 MINGW64 /d/rgq/linux
$ grep '\.$' re.txt
my qq is 99999000111.
not 4900000.

在扩展正则中\撬棍,唤醒前世记忆从而含有特殊含义

2.6  * 前一个字符连续出现0次或0次以上

  • 这个符号刚开始学习正则的时候,不常用。
  • 刚刚开始的时候掌握:什么叫连续出现即可。
1        数字1出现1次
111      数字1出现3次
123      数字出现3次
abcde    字母出现5次
abcd123  连续出现的数字和小写字母
Abcd123  连续出现的数字和大小写字母
  • 关于出现0次:这个符号没有的意思.

2.7 .* 所有

  • . 任意一个字符
  • * 前一个字符连续出现0次或0次以上
  • .* 表示所有 

  • 以任意内容开头直到匹配到am字符的行

  • 你贪婪吗?
    • 正则表示连续出现的时候,表示所有的时候,体现出贪婪性

  • 匹配开头一直到o的内容

2.8 [] [abc] 表示匹配任意1个字符,a或b或c,中括号相当于一个字符

  • () 小括号

  • []  中括号
  • {}  大括号  花括号

  • [abc]

  • 匹配数字
grep '[0-9]'  re.txt
  • 匹配小写字母
grep '[a-z]' re.txt
  • 匹配大写字母
[A-Z]
  • 匹配大小写字母
[a-zA-Z]
[a-Z] #如果这个用不了使用上面完整形式

  • 匹配大小写字母+数字
grep '[a-zA-Z0-9]' re.txt 
grep '[a-Z0-9]' re.txt
grep '[0-Z]' re.txt
  • 匹配出以字母m或n开头的行

  • 匹配出以.或空行或!结尾的行

温馨提示:[ ]中会自动去掉符号的特殊含义

2.9 [^] [^abc] 表示匹配任意1个字符,排除abc,中括号相当于一个字符

  • 建议掌握正则一段时间后再来理解与使用

2.10 小结——基础正则

基础正则含义
^以xxx开头的行
$以xxx结尾的行
^$空行
.任意一个字符
\转义字符
*前一个字符出现0次或0次以上
.*所有
[][abc]a或b或c,[]相当于是1个字符
[^][^abc]匹配除了abc之外的内容,[]相当于是1个字符

3.扩展正则

  • grep ==》 egrep 或者 grep -E
  • sed 使用 sed -r支持扩展正则
  • awk默认支持扩展正则

3.1  + 前一个字符连续出现1次或1次以上

  • +大部分配合着[]一起使用。

  • 取出连续出现的0

  • 取出连续出现的数字

  • 取出连续出现的字母(单词)

3.2 | 或者

  • 文件中包含oldboy或Linux的行

  • 过滤出ssh或http或smtp

  • 排除/etc/ssh/sshd_config中的空行或注释,输出的时候显示行号
Administrator@SYS191022J0 MINGW64 /d/rgq/linux
$ cat /etc/ssh/sshd_config
     1  #       $OpenBSD: sshd_config,v 1.104 2021/07/02 05:11:21 dtucker Exp $
     2
     3  # This is the sshd server system-wide configuration file.  See
     4  # sshd_config(5) for more information.
     5
     6  # This sshd was compiled with PATH=/bin:/usr/sbin:/sbin:/usr/bin
     7
     8  # The strategy used for options in the default sshd_config shipped with
     9  # OpenSSH is to specify options with their default value where
    10  # possible, but leave them commented.  Uncommented options override the
    11  # default value.
    12
    13  #Port 22
    14  #AddressFamily any
    15  #ListenAddress 0.0.0.0
    16  #ListenAddress ::
    17
    18  #HostKey /etc/ssh/ssh_host_rsa_key
    19  #HostKey /etc/ssh/ssh_host_ecdsa_key
    20  #HostKey /etc/ssh/ssh_host_ed25519_key
    21
    22  # Ciphers and keying
    23  #RekeyLimit default none
    24
    25  # Logging
    26  #SyslogFacility AUTH
    27  #LogLevel INFO
    28
    29  # Authentication:
    30
    31  #LoginGraceTime 2m
    32  #PermitRootLogin prohibit-password
    33  #StrictModes yes
    34  #MaxAuthTries 6
    35  #MaxSessions 10
    36
    37  #PubkeyAuthentication yes
    38
    39  # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
    40  # but this is overridden so installations will only check .ssh/authorized_keys
    41  AuthorizedKeysFile      .ssh/authorized_keys
    42
    43  #AuthorizedPrincipalsFile none
    44
    45  #AuthorizedKeysCommand none
    46  #AuthorizedKeysCommandUser nobody
    47
    48  # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
    49  #HostbasedAuthentication no
    50  # Change to yes if you don't trust ~/.ssh/known_hosts for
    51  # HostbasedAuthentication
    52  #IgnoreUserKnownHosts no
    53  # Don't read the user's ~/.rhosts and ~/.shosts files
    54  #IgnoreRhosts yes
    55
    56  # To disable tunneled clear text passwords, change to no here!
    57  #PasswordAuthentication yes
    58  #PermitEmptyPasswords no
    59
    60  # Change to no to disable s/key passwords
    61  #KbdInteractiveAuthentication yes
    62
    63  # Kerberos options
    64  #KerberosAuthentication no
    65  #KerberosOrLocalPasswd yes
    66  #KerberosTicketCleanup yes
    67  #KerberosGetAFSToken no
    68
    69  # GSSAPI options
    70  #GSSAPIAuthentication no
    71  #GSSAPICleanupCredentials yes
    72
    73  # Set this to 'yes' to enable PAM authentication, account processing,
    74  # and session processing. If this is enabled, PAM authentication will
    75  # be allowed through the KbdInteractiveAuthentication and
    76  # PasswordAuthentication.  Depending on your PAM configuration,
    77  # PAM authentication via KbdInteractiveAuthentication may bypass
    78  # the setting of "PermitRootLogin without-password".
    79  # If you just want the PAM account and session checks to run without
    80  # PAM authentication, then enable this but set PasswordAuthentication
    81  # and KbdInteractiveAuthentication to 'no'.
    82  #UsePAM no
    83
    84  #AllowAgentForwarding yes
    85  #AllowTcpForwarding yes
    86  #GatewayPorts no
    87  #X11Forwarding no
    88  #X11DisplayOffset 10
    89  #X11UseLocalhost yes
    90  #PermitTTY yes
    91  #PrintMotd yes
    92  #PrintLastLog yes
    93  #TCPKeepAlive yes
    94  #PermitUserEnvironment no
    95  #Compression delayed
    96  #ClientAliveInterval 0
    97  #ClientAliveCountMax 3
    98  #UseDNS no
    99  #PidFile /etc/ssh/sshd.pid
   100  #MaxStartups 10:30:100
   101  #PermitTunnel no
   102  #ChrootDirectory none
   103  #VersionAddendum none
   104
   105  # no default banner path
   106  #Banner none
   107
   108  # override default of no subsystems
   109  Subsystem       sftp    /usr/lib/ssh/sftp-server
   110
   111  # Example of overriding settings on a per-user basis
   112  #Match User anoncvs
   113  #       X11Forwarding no
   114  #       AllowTcpForwarding no
   115  #       PermitTTY no
   116  #       ForceCommand cvs server







Administrator@SYS191022J0 MINGW64 /d/rgq/linux
$ egrep -vn '^$|#' /etc/ssh/sshd_config
41:AuthorizedKeysFile   .ssh/authorized_keys
109:Subsystem   sftp    /usr/lib/ssh/sftp-server






3.3 ()表示一个整体,用于后向引用(反向引用sed)

3.4 {}  a{n,m} 前一个字符连续出现至少n次,最多m次

格式应用
a{n,m} 前一个字符连续出现至少n次,最多m次表示连续出现的范围
a{n}  前一个字符连续出现n次匹配固定的次数
a{n,} 前一个字符连续出现至少n次
a{,m} 前一个字符连续出现,最多m次

  • 匹配身份证的正则
分析规律

18位  数字或X
X在最后一位

身份证 18位 17位是数字  最后1位数字或X
[root@Gq]# cat id2.txt 

谈媚轩230189199012251659
庾菲刚23018199012015108
桑春23018215507074953
范惠融230182197510240695
霍莎23018219590413055X
单燕可230182197007233320 
雷聪23018215709180586
郑芬澜23018199402088233 
阙宁茜230182198305100379 
赵璧桂23018195312204747 
史勤23018218107207651
项珠230182195305221943
季艳盛230182195604045725 
吕进230182196412284021
翟竹静230182196102271858 
翟竹静23018219610227
翟竹静2301821922
翟竹静230181922

  • 稍微复杂的匹配身份证的正则

3.5 ? 前一个字符 出现0次或1次

3.6 扩展正则小结

扩展正则含义
+前一个字符连续出现1次或多次
|或者
()1.表示整体     2.后向引用或反向引用(sed)
{}a{n,m}  前一个字符连续出现至少n次,最多m次
前一个字符出现0次或1次

3. perl语言正则表达式-熟悉

  • perl正则
符号含义
\d[0-9]
\s匹配的空字符  空格 tab 等等 [\  \t\r\n\f]
\w[0-9a-zA-Z]
\D[^0-9]排除数字
\S非空字符
\W排除数字,大小写字母和_
[root@Gq]# grep -P  '\d'  re.txt 
my blog is http://oldboy.blog.51cto.com 
my qq is 49000448
not 4900000448.

4.零碎的正则-括号表达式-了解

  • info  grep中

5.总结

基础正则含义
^以XXX开头的行
$以……结尾的行
^$空行
.任意一个字符
\转义字符
*前一个字符出现0次或0次以上
.*所有
[][abc]a或b或c,[]相当于是一个字符
[^][^abc] 匹配除了abc之外的内容,[]相当于是1个字符
扩展正则含义
+前一个字符连续出现1次或多次
|或者
()1.表示整体 2.后向引用或反向引用(sed)
{}a{n,m} 前一个字符连续出现至少n次,最多m次
前一个字符出现0次或1次

微信扫描下方二维码关注公众号带你玩转Linux

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gqren003

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

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

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

打赏作者

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

抵扣说明:

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

余额充值