linux 三剑客之一

 

使用场景

  • 文本处理之"查"
  • 想要通过xxx查出想要的文本内容
  • 实际: 通过"正则表达式"过滤出想要的文本内容(通过案例体会)
  • 用到"正则表达式"知识点

 

  1. 作用: 过滤文本内容
  2. 语法
  • grep 参数 正则表达式(匹配规则) 文本路径
  • 参数(使用见操作演示)
  • -E :使用拓展正则   等价于  egrep (别纠结,本文本查使用场景会用即可)
  • -R或-r : 递归匹配
  • -o 显示匹配成功的内容,显示一个则换行
  • -v 反向过滤
  • -i 忽略大小写
  • -n  显示出过滤的文本行号
  • -A 将匹配成功的后n行显示出来
  • -B : 匹配成功之后,将匹配行的前n行显示出来
  • -C : 匹配成功之后,将匹配行的前后各n行显示出来
  • -c 只显示匹配成功的行数字
  • -q 静默输出(即不打印) 
  • 配合$?使用

  •  $? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败

  • l :  将文本的名称打印/显示出来(去重:你根据老师视频演示猜出来的,不一定正确)

  • 案例
  • 在/etc目录下,有多少个文件包含root
  • grep -rl 'root' /etc/ | wc -l

-----

正则 

-----

 

分类

 

1 普通正则

2 拓展正则

3 案例(与grep命令配合使用)

4 转译字符\的含义

 

 

详细

 

1 普通正则

  • ^ : 以某字符开头
  • $ : 以某字符结尾
  • .  : 匹配除换行符之外的任意单个字符
  • * :匹配前导字符的任意个数
  • [] : 某组字符串的任意一个字符
  • [^]      : 取反
  • [a-z]    : 匹配小写字母
  • [A-Z]    : 匹配大写字母
  • [a-zA-Z] : 匹配字母
  • [0-9]      : 匹配数字
  • \         : 取消转义
  • ()        : 分组
  • \n : 代表第n个分组

2 拓展(高级)正则

  • {}     :匹配的次数
  • {n}        : 匹配n次
  • {n,}    :至少匹配n次
  • {n,m}    :匹配 n 到 m 次
  • {,m}    :最多匹配m次
  • +      :匹配至少有一个前导字符
  • ?      : 匹配一个或零个前导字符
  • |      :或

 

3 案例

  1. 在/etc/passwd文件中,匹配以ftp开头的行
  • grep '^ftp' /etc/passwd
  • 在/etc/passwd文件中,匹配以bash结尾的行
  • grep 'bash$' /etc/passwd
  • 匹配本机中有哪些ip
  • 初步过滤
  • ip a | grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
  • 精确过滤
  • ([(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]\.){3}[(1[0-9]{2}){3}(2[0-4][0-9]){3}(25[0-4]){3}[0-9]{1,2}]
  • 要求将xxx中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
  • grep -vE '^#\ +' /etc/fstab
  • 找出文件xxx中至少有一个空格的行
  • grep -E '\ +' xxx
  • 将 nginx.conf 文件中以#开头的行和空行,全部删除
  • grep -vE '^\ *#|^$' /etc/nginx/nginx.conf
  • 过滤手机号的正则表达式
  • 1[0-9]{10}
  • 过滤邮箱的正则表达式
  • 例 chenyang@123.com
  • [a-zA-Z0-9-_]+@[a-z0-9]+\.(com|cn|com\.cn|net)
  • 过滤密码,要求必须要大写字母、小写字母、数字以及下划线,长度在 8 到 16 之间
  • ([A-Z]+[a-z]+[0-9]+_+){8,16}

 

4 转译字符\的含义

linux grep严格匹配 linux grep 正则匹配_正则表达式

 

 

---------

grep操作演示

---------

 

无参数

linux grep严格匹配 linux grep 正则匹配_正则_02

-o 显示匹配成功的内容,显示一个则换行

linux grep严格匹配 linux grep 正则匹配_正则表达式_03

-n  显示出过滤的文本行号

linux grep严格匹配 linux grep 正则匹配_linux grep严格匹配_04

-A 将匹配成功的后n行显示出来

  • -B : 匹配成功之后,将匹配行的前n行显示出来
  • -C : 匹配成功之后,将匹配行的前后各n行显示出来

linux grep严格匹配 linux grep 正则匹配_linux grep严格匹配_05

-c 只显示匹配成功的行数字

linux grep严格匹配 linux grep 正则匹配_正则_06

-v 反向过滤

linux grep严格匹配 linux grep 正则匹配_linux grep严格匹配_07

-q 静默输出(即不打印) 

    配合$?使用

        $? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败

linux grep严格匹配 linux grep 正则匹配_正则表达式_08

-i 忽略大小写

linux grep严格匹配 linux grep 正则匹配_linux grep严格匹配_09