Shell编程正则表达式grep

定义

正则表达式是使用单个字符串来描述,匹配一系列符合某个句法规则的字符串,简单来说,是一种匹配字符串的方法,通过一些特殊符号,实现快速查找,删除,替换某个特定的字符串。
正则表达式是由普通字符与元字符组成文字模式。其中普通字符包括大小写字母,数字,标点符号及一些其他符号,元字符则是指那些在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符1前面的字符)在目标对象中的出现模式。

用途

正则表达式对于系统管理员来说是非常重要,系统运行过程中会产生大量的信息,这些信息有些是非常重要的,有些则仅是告知的信息。身为系统管理员如果直接看这么多的信息数据,无法快速定位到重要的信息,如“用户账号登录失败”“服务启动失败”等信息。这时可以通过正则表达式快速提取“有问题”的信息。如此一来,可以将运维工作变得更加简单,方便。

分类

正则表达式的字符串表达方法根据不同的严谨程度与功能分为基本正则表达式与扩展正则表达式。基础正则表达式是常用正则表达式最基础的部分。在Linux系统中常见的文件处理工具中grep 与sed 支持基础正则表达式,而egrep 与awk 支持扩展正则表达式。

层次

  • 基础正则表达式
  • 拓展正则表达式

文本处理工具

  • grep
  • egrep
  • sed
  • awk

组成

  1. 普通字符
    大小写字母、数字、标点符号及一些其他符号
  2. 元字符
    在正则表达式中具有特殊意义的专用字符

元字符

 1. \:转义字符, (让具有特殊意义的元字符作为普通字符去使用)
例如:\!(!),\n(换行)等
 2. ^:匹配字符串开始的位置   (以....开始)
例如:^a,^the,^#
 3. $:匹配字符串结束的位置  (以....结束)
例如:word$
 4. .:匹配除\n之外的任意的一个字符    
例如:go.d,go..d (以g开头,d结尾,中间包括两个字符内容)
 5. *:匹配前面子表达式0次或者多次
例如:goo*d(god,good,goood....),go.*d(god,goad,gord...)
 6. [list]:匹配list列表中的一个字符
例如:go[ola]d,[abc],[a-z],[a-z0-9]
 7. [^list]:匹配任意不在list列表中的一个字符 (排除在外,不匹配)
例如:[^a-z],[^0-9],[^A-Z0-9]  
 8. \{
    
    n,m\}:匹配前面的子表达式n到m次,有\{
    
    n\},\{
    
    n,\},\{
    
    n,m\}三种格式
例如:go\{
    
    2\}d(o出现2次),go\{
    
    2,3\}d(o出现至少2次,最多3次),go\{
    
    2,\}d(o出现2次或者2次以上)
 9. 0{
    
    1}等价于“0+0{
    
    0,}等价于“0*

grep

常用命令

  • -n:表示显示行号
  • -i:表示不区分大小写
  • -v:表示反向过滤
  • [ ]: 查找集合字符

常用格式

  • ^ :匹配输入字符串的开始位置。除非在方括号表达式中使用,代表不包含该字符集合。要匹配“^”字符本身,请使用“\”
  • $
    :匹配输入字符串的结尾位置。如果设置了RegExp(正则表达式)对象的Multiline(多个)属性,则“KaTeX parse error: Undefined control sequence: \n at position 6: ”也匹配‘\̲n̲’或‘\r’(换行)。 要匹配…"字符本身,请使用“$”
  • .:匹配除了“\n\r”之外的任何单个的字符
  • \:反斜杠,又叫转义字符,去除其紧跟的元字符或通配符的特殊意义。
  • :匹配前面的子表达式零次或多次。要匹配“”字符,请使用“*”
  • []:字符集合。匹配所包含的任意一个字符。例如,“[abc” 可以匹配“plain” 中的“a”
  • [n1-n2]: 字符范围。匹配指定范围内的任意一个字符。例如,“[a-z]” 可以匹配“a”到“z”范围内的任意一个小写字母字符。

注意:只有连字符(-)在字符组内部,并且出现在两个字符之间时,才能表示子符的范围;如果出现在字符组的开头,则只能表示连字符本身

  • {n}: n是一个非负整数,匹配确定的n次。例如,“o{2}"不能匹配“Bob” 中的“o”,但是能匹配“food”中的“oo”
  • {n,}: n是一个非负整数,至少匹配n次。例如,“o{2,}”不能匹配“Bob” 中的“o”,但能匹配“fooood”中的所有o。
  • “o{1,}”等价于“o+”(至少出现1次)。“o{0,}”则等价于“o*"(至少出现0次)
  • {n,m}: m和n均为非负整数,其中n<=m, 最少匹配n次且最多匹配m次

过滤包含the的内容

[root@server2 ~]# grep -n 'the' test.txt 

在这里插入图片描述

过滤不包含the的内容

[root@server2 ~]# grep -vn 'the' test.txt 

在这里插入图片描述

过滤以sh开头,以rt结尾,中间匹配i或o

[root@server2 ~]# grep -n 'sh[oi]rt' test.txt 

在这里插入图片描述

过滤o出现2次和出现2次以上的

[root@server2 ~]# grep -n 'o\{2\}' test.txt
[root@server2 ~]# grep -n 'o\{2,\}' test.txt

在这里插入图片描述

过滤包含数字0-9的内容与不包含数字0-9的内容

[root@server2 ~]# grep -n '[0-9]' test.txt
[root@server2 ~]# grep -n '[^0-9]' test.txt

在这里插入图片描述

过滤以the为开头的内容和以a-z字母为开头的内容

[root@server2 ~]# grep -n '^the' test.txt
[root@server2 ~]# grep -n '^[a-z]' test.txt

在这里插入图片描述

过滤以 . 结尾的内容

[root@server2 ~]# grep -n '\.$' test.txt

在这里插入图片描述

过滤空白行内容

[root@server2 ~]# grep -n '^$' test.txt

在这里插入图片描述

过滤w开头,以d结尾中间是任意两个字符的内容

[root@server2 ~]# grep -n 'w..d' test.txt

在这里插入图片描述

过滤查找至少两个o的内容

[root@server2 ~]# grep -n 'ooo*' test.txt

在这里插入图片描述

匹配以0-9中任意一个字符且可重复0或多次和匹配以w开头,d结尾,中间任意字符可重复0次或多次的内容

[root@server2 ~]# grep -n '[0-9][0-9]*' test.txt
[root@server2 ~]# grep -n 'w.*d' test.txt

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49343462/article/details/109636024