注意事项:正则符号都是英文
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 ^ 以……开头的行
$ grep '^I' re.txt
I am teacher!
I teacher linux.
I like badminton ball,billiard ball and chinese chess!
2.2 $ 以……结尾的行
$ grep '1$' re.txt
my qq is 99999000111
cat -A 显示出文件中的特殊隐藏符号.
2.3 ^$ 空行,这行中没有任何字符
应用建议:用于排除文件中的空行使用,排除空行和带#号的行。
2.4 . 任意一个字符
了解: . 过滤的时候排除空行. 点不会匹配空行
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 连续出现的数字和大小写字母
2.7 .* 所有
- . 任意一个字符
- * 前一个字符连续出现0次或0次以上
- .* 表示所有
- 你贪婪吗?
- 正则表示连续出现的时候,表示所有的时候,体现出贪婪性
2.8 [] [abc] 表示匹配任意1个字符,a或b或c,中括号相当于一个字符
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
温馨提示:[ ]中会自动去掉符号的特殊含义
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次以上
3.2 | 或者
- 排除/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语言正则表达式-熟悉
符号 | 含义 |
---|
\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.零碎的正则-括号表达式-了解
5.总结
基础正则 | 含义 |
---|
^ | 以XXX开头的行 |
$ | 以……结尾的行 |
^$ | 空行 |
. | 任意一个字符 |
\ | 转义字符 |
* | 前一个字符出现0次或0次以上 |
.* | 所有 |
[] | [abc]a或b或c,[]相当于是一个字符 |
[^] | [^abc] 匹配除了abc之外的内容,[]相当于是1个字符 |
扩展正则 | 含义 |
---|
+ | 前一个字符连续出现1次或多次 |
| | 或者 |
() | 1.表示整体 2.后向引用或反向引用(sed) |
{} | a{n,m} 前一个字符连续出现至少n次,最多m次 |
? | 前一个字符出现0次或1次 |
微信扫描下方二维码关注公众号带你玩转Linux