Linux正则表达式基础入门+扩展

最近在看正则表达式部分的东西,有些东西记录下.

  1. “ .”(一个点)符号. 点符号用于匹配除换行符之外的任意一个字符。例如:r.t可以匹配rot、rut
  2. “ * ”符号. *符号用于匹配前一个字符0次或任意多次
  3. “ {n,m}”符号
    3.1 {n} 匹配前面的字符n次 grep 'ro\{2\}t' 匹配root
    3.2 {n,} 匹配前面的字符至少n次以上(含n次) grep 'ro\{0,\}t 匹配以r开头,t结尾, 包含o 0到多次'
    3.3 {n,m} 匹配前面的字符n到m次.
  4. “ ^”符号, 这个符号用于匹配开头的字符, “^root”匹配的是以字母root开始的行
  5. “ $”符号, “$”用于匹配尾部, “abc$”代表的是以abc结尾的行
  6. “ []”符号, 用于匹配方括号内出现的任一字符. 单项选择题的答案,可能是A、B、C、D选项中的任意一种,用正则表达式表示就是[ABCD]。如果遇到比较大范围的匹配,比如说要匹配任意一个大写字母,就需要使用“-”号做范围限定,写成[A-Z],要匹配所有字母则写成[A-Za-z]。一定要注意,这里“-”的作用不是充当一个字符
  7. “ \”符号, 这个符号代表转义字符,我们可以对很多特殊的字符进行“转义”,让它只代表字符本身,因此这里的写法就应该是[\ \-].
  8. “ <”符号和“>”符号, 这两个符号分别用于界定单词的左边界和右边界. “\<hello”用于匹配以“hello”开头的单词;而“hello\>”则用于匹配以“hello”结尾的单词. 还可以使用它们的组合—“\<\>”用于精确匹配一个字符串。所以“\<hello\>”可精确匹配单词hello
  9. “ \d”符号, 匹配一个数字,等价于[0-9].
  10. “ \b”符号, 匹配单词的边界. “\bhello\b”可精确匹配“hello”单词。
  11. “ \B”符号, 匹配非单词的边界. hello\B可以匹配“helloworld”中的“hello”
  12. “ \w”符号, 匹配字母、数字和下划线,等价于[A-Za-z0-9].
  13. “ \W”符号, 匹配非字母、非数字、非下划线,等价于[^A-Za-z0-9]。
  14. “ \n”符号, 匹配一个换行符。
  15. “ \r”符号, 匹配一个回车符。
  16. “ \t”符号, 匹配一个制表符。
  17. “ \f”符号, 匹配一个换页符。
  18. “ \s”符号, 匹配任何空白字符。
  19. “ \S”符号, 匹配任何非空白字符。
    扩展正则表达式.
  20. “?”符号, “?”符号用于匹配前一个字符0次或1次. “ro?t”仅能匹配rot或rt。
  21. “+”符号, “+”符号用于匹配前一个字符1次以上. “ro+t”就可以匹配rot、root等
  22. “|”符号, “|”符号是“或”的意思,即多种可能的罗列,彼此间是一种分支关系.
  23. “()”符号, “()”符号通常需要和“|”符号联合使用,用于枚举一系列可替换的字符.
    通配符
  24. “*”符号, 代表0个或多个字符.
  25. “?”符号, 代表的是任意一个字符.
  26. “{}”符号, “{}”可拥有匹配所有括号内包含的以逗号隔开的字符.
  27. “^”符号和“!”符号 , 这两个符号往往和“[]”一起使用,当出现在“[]”中的时候,代表取反。所以[^A](或[!A])代表不是A。
    示例:
    为了演示grep命令的用法, 首先创建一个文件RegExp.txt,文件内容如下所示:
[hadoop@bdata01 shell ]$ cat RegExp.txt 
----------TEXT BEGIN-----------

good morning teacher
hello world is a script
gold sunshine looks beautiful
golden time flies
god bless me
what a delicious food
they teast Good
you fell glad
wrong word gooood
wrong word g10d
wrong word g12d
wrong word g13d
www.helloworld.com
www@helloworld@com
Upper case
100% means pure
php have a gd module

-----------TEXT END----------------
#1. 搜索含有good的单词的行, 注意: grep默认是区分大小写的,所以这里只会打印有good的行
[hadoop@bdata01 shell ]$ grep 'good' RegExp.txt 
good morning teacher

#2. 搜索含有good单词的行,不区分大小写
[hadoop@bdata01 shell ]$ grep -i 'good' RegExp.txt 
good morning teacher
they teast Good

#3. 统计不含good单词的行,不区分大小写
[hadoop@bdata01 shell ]$ grep -ivc 'good' RegExp.txt 
19

#4. 搜索以good开头的行
[hadoop@bdata01 shell ]$ grep '^good' RegExp.txt 
good morning teacher

#5. 搜索以Good结尾的行
[hadoop@bdata01 shell ]$ grep 'Good$' RegExp.txt 
they teast Good

#6. 搜索空行行数
[hadoop@bdata01 shell ]$ grep -c '^$' RegExp.txt 
2

#7. 搜索包含good 和 Good的行
[hadoop@bdata01 shell ]$ grep '[Gg]ood' RegExp.txt 
good morning teacher
they teast Good

#8. 搜索一个包含ood的行,但不能是good 和 Good,使用反选功能
[hadoop@bdata01 shell ]$ grep '[^Gg]ood' RegExp.txt 
what a delicious food
wrong word gooood

#9. 搜索一个以g开头,中间两个任意字符,结尾是d的行
[hadoop@bdata01 shell ]$ grep 'g..d' RegExp.txt 
good morning teacher
gold sunshine looks beautiful
golden time flies
you fell glad
wrong word g10d
wrong word g12d
wrong word g13d

#10. 搜索一个以g或者G开头,中间两个任意字符,结尾是d的行
[hadoop@bdata01 shell ]$ grep '[Gg]..d' RegExp.txt 
good morning teacher
gold sunshine looks beautiful
golden time flies
they teast Good
you fell glad
wrong word g10d
wrong word g12d
wrong word g13d

#11. 搜索以g或G开头,中间是1或者o,第三个字符是任意字符,最后以d结尾的行
[hadoop@bdata01 shell ]$ grep '[Gg][1o].d' RegExp.txt 
good morning teacher
gold sunshine looks beautiful
golden time flies
they teast Good
wrong word g10d
wrong word g12d
wrong word g13d

#12. 搜索含有gold的行, 精确匹配
[hadoop@bdata01 shell ]$ grep '\<gold\>' RegExp.txt 
gold sunshine looks beautiful
[hadoop@bdata01 shell ]$ grep '\bgold\b' RegExp.txt 
gold sunshine looks beautiful

#13. 搜索以g开头,中间包含0到无限个o,以d结尾的行
[hadoop@bdata01 shell ]$ grep go*d RegExp.txt 
good morning teacher
god bless me
wrong word gooood
php have a gd module

#14. 搜索以g开头,中间包含字符,以d结尾的行
[hadoop@bdata01 shell ]$ grep 'g.*d' RegExp.txt 
good morning teacher
gold sunshine looks beautiful
golden time flies
god bless me
you fell glad
wrong word gooood
wrong word g10d
wrong word g12d
wrong word g13d
php have a gd module

#15. 搜索把o错写成数字的行
[hadoop@bdata01 shell ]$ grep 'g1[0-9]d' RegExp.txt 
wrong word g10d
wrong word g12d
wrong word g13d

#16. 搜索包含www.helloworld.com的行
[hadoop@bdata01 shell ]$ grep 'www.helloworld.com' RegExp.txt 
www.helloworld.com
www@helloworld@com
这里需要对.进行转义
[hadoop@bdata01 shell ]$ grep 'www\.helloworld\.com' RegExp.txt 
www.helloworld.com

#17. 搜索一个将good拼错,写了多个额o的行
#搜两个o及以上的行
[hadoop@bdata01 shell ]$ grep 'go\{2,\}' RegExp.txt 
good morning teacher
wrong word gooood
#搜有四个o的行
[hadoop@bdata01 shell ]$ grep 'go\{4\}' RegExp.txt 
wrong word gooood

#18.搜索g和d之间至少有一个o的行
[hadoop@bdata01 shell ]$ egrep 'go+d' RegExp.txt 
good morning teacher
god bless me
wrong word gooood

#19. 搜索g和d之间只有0个或者1个o的行
[hadoop@bdata01 shell ]$ egrep 'go?d' RegExp.txt 
god bless me
php have a gd module

#20. 搜索有glad或者 gold的行
[hadoop@bdata01 shell ]$ egrep 'glad|gold' RegExp.txt 
gold sunshine looks beautiful
golden time flies
you fell glad
[hadoop@bdata01 shell ]$ egrep 'g(la|ol)d' RegExp.txt 
gold sunshine looks beautiful
golden time flies
you fell glad

参考《Linux系统命令及shell脚本实践指南》

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值