正则 gerp

来源:互联网 发布:淘宝打针织打底衫长款 编辑:程序博客网 时间:2024/06/08 15:40

*什么是正则*

  • 正则表达式(Regular Expression,RE)过一些特殊字符的排列,用以查找、替换、删除一行或者多行文字字符串,简单的就是说,正则表达式就是用在字符串的处理上面的一项“表达式”
  • 正则不是工具程序,而是一种字符串处理的标准依据,如果要以正则的方式处理字符串,就得使用支持正则的工具程序才行 ,如:vi,sed,awk
  • 正则就是处理字符串的方法,以行为单位进行字符串的处理行为。
  • 正则就是一串有规律的字符串
  • 掌握好正则对于编程shell脚本有很大帮助
  • 各种编程语言中都有正则,原理相同
  • 本章学习grep/egrep、sed、awk

9.1 正则介绍_grep(上)

  • gerp 用来过滤指定关键词
  • 格式:grep [-cinvrABC] ‘word’ filename
    -c 表示打印符合要求的行数
    这里写图片描述
    -n 表示输出符合要求的行和行号
    这里写图片描述
    -i 表示不区分大小写
    这里写图片描述

    -v 表示打印不符合要求的行
    这里写图片描述
    -r 表示将子目录或子子目录下符合要求的文件列出来(所有子目录)
    这里写图片描述
    这样查找不方便的话 也可以重定向到一个空白文件才 再去过滤
    这里写图片描述

-A:后面跟一个数字(有无空格都可以),打印符合要求的行以及下面n行
这里写图片描述
-B:后面跟一个数字(有无空格都可以),打印符合要求的行以及上面n行
这里写图片描述

-c 后面跟一个数字,同时过滤符合要求的行和上下各n行
这里写图片描述

## 9.2 grep(中) ##

  • 过滤出所有包含数字的行
    grep ‘[0-9]’ filename
    这里写图片描述

  • 过滤出所有不包含数字的行 那么加上-v 选项即可
    grep -v ‘[0-9]’ filename
    这里写图片描述passwd中所有行都带有数字,所以什么都不会显出不来

  • 过滤掉所有以#开头的行
    grep -n ‘^#’ filename
    这里写图片描述第14行不是以#开头,不符合要求,下图就不存在第14行了。
    这里写图片描述

  • 过滤掉不以#开头的行
    grep -nv ‘^#’ filename
    这里写图片描述

    这里写图片描述

  • 过滤掉所有非0-9数字的字符(红色符合要求)
    grep ‘[^0-9]’ filename
    这里写图片描述
  • 过滤掉所有已数字开头的行
    grep ‘^[^0-9]’ filename
    这里写图片描述
  • ‘^#’ :表示已#开头

    ‘^[^0-9]’ 表示方括号中这些数字的反义 非的意思

    9.3 grep(下)

  • 过滤出任意一个字符
    grep ‘r.o’ filename

    这里的.可以匹配到所有的字符a-z A-Z 0-9 以及特殊符号

  • 过滤出任意重复字符 (表示,0个或多个前面的字符。)
    grep ‘b*b fliename
    这里写图片描述

  • grep ‘. * ’ filename 这里的 . *表示0个或者多个任意字符,空格也包括在内
  • 指定要过滤出字符出现的次数
    grep ‘o{2}’ filename
    这里写图片描述
    { }内为数字,表示前面字符要重复的次数,并加上转义字符\
    使用{ }还可以表示一个范围,具体格式为{n1,n2},其中n1 < n2,表示重复n1到n2次前面的字符,n2还可以为空,这是表示大于或者等于n1次
  • 如不想在’o{2}’这里加上\转义字符 ,可使用egrep命令
    egrep ‘o{2}’filename
    或者grep -E ‘o{2}’filename
    这里写图片描述

或者grep -E ‘(oo){2}’ filename 必须加上-E选项,否则需要转义字符\
这里写图片描述

  • 过滤出一个或者多个指定的字符
    egrep ‘o+o’或者grep‘o+o’
    +号表示前面字符的1次或者多次
    在前面的’o*o ’ 中的*表示0次或者多次
    这里写图片描述
  • 过滤出0个或者1个指定的字符
    egrep ‘r?2t’ filename 这里?号表示?前面的字符重复的次数为0次或者1次
    这里写图片描述
  • 过滤出字符串1或者字符串2
    使用| 符号表示或者的意思
    前面命令是grep -E 或者egrep
    这里写图片描述

可以使用多个,并加上-i选项不区分大小写
这里写图片描述

总结:
1 . 表示任意一个字符
2 * 表示0个或者多个前面的字符, *与前面字符组合起来使用
3 .* 表示通配任意字符,所有的都匹配,不管有或者没有的
4 { } 表示{}前面字符的一个范围,可使用小括号
5 +表示一个或者多个+前面的字符
6 ? 表示0个或者1个?前面的字符
7 | 表示或者的意思

原创粉丝点击