linux 中 grep命令(含正则)

linux 三剑客之一
 
使用场景
  • 文本处理之"查"
    • 想要通过xxx查出想要的文本内容
      • 实际: 通过"正则表达式"过滤出想要的文本内容(通过案例体会)
      • 用到"正则表达式"知识点
 
  1. 作用: 过滤文本内容
  2. 语法
    • grep 参数 正则表达式(匹配规则) 文本路径
  3. 参数(使用见操作演示)
    • -E :使用拓展正则   等价于  egrep (别纠结,本文本查使用场景会用即可)
    • -R或-r : 递归匹配
    • -o 显示匹配成功的内容,显示一个则换行
    • -v 反向过滤
    • -i 忽略大小写
    • -n  显示出过滤的文本行号
    • -A 将匹配成功的后n行显示出来
      • -B : 匹配成功之后,将匹配行的前n行显示出来
      • -C : 匹配成功之后,将匹配行的前后各n行显示出来
    • -c 只显示匹配成功的行数字
    • -q 静默输出(即不打印) 
      • 配合$?使用
      •  $? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
    • l :  将文本的名称打印/显示出来(去重:你根据老师视频演示猜出来的,不一定正确)
  4. 案例
    • 在/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
  2. 在/etc/passwd文件中,匹配以bash结尾的行
    • grep 'bash$' /etc/passwd
  3. 匹配本机中有哪些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}]
  4. 要求将xxx中的去掉包含 # 开头的行,且要求 # 后至少有一个空格
    • grep -vE '^#\ +' /etc/fstab
  5. 找出文件xxx中至少有一个空格的行
    • grep -E '\ +' xxx
  6. 将 nginx.conf 文件中以#开头的行和空行,全部删除
    • grep -vE '^\ *#|^$' /etc/nginx/nginx.conf
  7. 过滤手机号的正则表达式
    • 1[0-9]{10}
  8. 过滤邮箱的正则表达式
  9. 过滤密码,要求必须要大写字母、小写字母、数字以及下划线,长度在 8 到 16 之间
    • ([A-Z]+[a-z]+[0-9]+_+){8,16}
 
4 转译字符\的含义
 
 
---------
grep操作演示
---------
 
无参数
-o 显示匹配成功的内容,显示一个则换行
-n  显示出过滤的文本行号
-A 将匹配成功的后n行显示出来
  • -B : 匹配成功之后,将匹配行的前n行显示出来
  • -C : 匹配成功之后,将匹配行的前后各n行显示出来
-c 只显示匹配成功的行数字
-v 反向过滤
-q 静默输出(即不打印) 
    配合$?使用
        $? : 上一行命令执行的结果,0代表执行成功,其他数字代表执行失败
-i 忽略大小写
 
 
posted @ 2021-12-21 22:36  tslam  阅读(1325)  评论(0编辑  收藏  举报