老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

秘籍分享 | 3000字掌握正则表达式,学会了让1小时的工作变成5分钟!

老男孩IT教育

常见问题

2023年5月30日 18:06

正则符号都是英文符号。推荐使用grep/egrep命令,默认设置了别名,自动加上颜色.

  注意事项正则

  符号都是英文符号

  推荐使用grep/egrep命令,默认设置了别名,自动加上颜色.

  http://nbre.oldboylinux.cn 分析正则与正则匹配到的内容.

#'' "" . 
#‘’ ”“ 。
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'

  符号概述

  基础正则

  三剑客命令默认支持的正则.

  环境准备

cat >/oldboy/re.txt<<EOF
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com  
our size is http://blog.oldboyedu.com  

my qq is 49000448
not 4900000448.

my god ,i am not oldbey,but OLDBOY!
EOF

  1) ^ 以....开头的行

  以I开头的行

  2) $ 以....结尾的行

  以数字8结尾的行

  找出文件中以字母m结尾的行

  cat -A 显示出文件中的特殊隐藏符号.

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

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

  排除空行

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

  4) . 任意一个字符

  oldb任意一个字符y

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

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

  找出文件中以.(点)结尾的行

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

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

  这个符号刚开始学习正则的时候不常用,刚刚开始的时候掌握什么叫连续出现即可

1      数字1出现1次
111    数字1出现3次
123    数字出现3次
oldboy 字母出现6次
oldboy996  连续出现的数字和小写字母
Lidao996   连续出现的数字和大小写字母

  关于出现0次: 这个符号没有的意思

  7) .* 所有

  .任意一个字符

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

  .* 表示所有.

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

  你贪婪吗?

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

  匹配开头一直到o的内容

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

() 小括号 
[] 中括号
{} 大括号 花括号

  [abc]

  匹配数字

  grep '[0-9]' re.txt

  匹配小写字母

  [a-z]

  匹配大写字母

  [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开头的行

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

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

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

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

  10) 小结基础正则

  扩展正则

  grep===egrep 或grep -E

  sed 使用sed -r支持扩展正则

  awk默认支持扩展正则.

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

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

  取出连续出现的0

  取出连续出现

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

  2) | 或者

  文件中包含oldboy或linux的行

  过滤出ssh或http或smtp

  排除/etc/ssh/sshd_config中的空行或注释,输出的时候显示行号

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

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

分析规律.
18位 数字或X
X在最后一位

身份照 18位 17位是数字 最后1位数字或X
[root@oldboy83-prod oldboy]# cat   id2.txt 
谈媚轩 230189199012251659
庾菲刚 23018199012015108
桑春 23018215507074953
范惠融 230182197510240695
霍莎 23018219590413055X
单燕可 230182197007233320
雷聪 23018215709180586
郑芬澜 23018199402088233
阙宁茜 230182198305100379
赵璧桂 23018195312204747
史勤 23018218107207651
项珠 230182195305221943
季艳盛 230182195604045725
吕进 230182196412284021
翟竹静 230182196102271858
翟竹静 23018219610227
翟竹静 2301821922
翟竹静 230181922

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

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

  6) 扩展正则小结

  perl语言正则表达式-熟悉

  perl正则

[root@oldboy83-prod oldboy]# grep -P '\d'  re.txt 
my blog is http://oldboy.blog.51cto.com  
my qq is 49000448
not 4900000448.

  零碎的正则-括号表达式

  info grep中

  总结

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。