grep使用与实战

grep使用与实战

grep使用与实战

作用:文本搜索工具,根据用户指定的 “模式” 对目标文本**”逐行“**进行匹配检查,打印匹配到的行

模式:由正则表达式的元字符以及文本字符形成的过滤条件

1. 使用格式

  • 格式: grep [options] pattern file....
  • --color=auto : 对匹配到的文本高亮,shell中的grep是其别名,如果不想使用直接用\grep 或 绝对路径即可
  • -i 忽略字符大小写
  • -o 仅显示匹配的字符本身
  • -v 显示不能被模式匹配到的行
  • -E 支持使用扩展的正则表达式 等于egrep
  • -q 静默模式,可以通过退出码来判断
  • -A # 后#行
  • -B # 前#行
  • -C # 前后各#行
  • -f 等于 fgrep 不使用正则表达式
  • -P 支持perl正则表达式

2. 正则表达式

  • 字符匹配

    • . 匹配任意单个字符

    • [] 匹配指定范围内的任意单个字符

    • [^] 匹配指定范围外的任意单个字符

    • 其中 []内可以是如下特定的字符[:digit:] 、[:lower:]、 [:upper:]、 [:alpha:]、 [:alnum:]、 [:punct:]、 [:space:]

      image-20200408165834558

  • 匹配次数

    • * 匹配前面的字符任意次
    • .* 任意长度的任意字符
    • ? 匹配前面的字符 0/1 次
    • \+ 匹配前面的字符 1或多次
    • \{m\} 匹配前面的字符m次
    • \{m,n\} 匹配前面的字符 m~n次 其中 \{0,n\} 至多n次,\{m,\} 至少m次
  • 位置锚定

    • ^ 行首锚定,用于模式的最左侧
    • $ 行尾锚定,用于模式的最右侧
    • PATTERN$ 整行匹配,其中 $ 表示空白行 ^[[:space:]]*$ 表示空行或包含空白字符的行
    • \< 或 \b 词首
    • \> 或 \b 词尾
    • \<PATTERN\> 整个单词锚定
  • 分组引用

    • \(\) 将一个或多个字符捆绑到一起,当作一个整体进行处理
    • \# 后向引用,如 \1 \2 \3 分别表示前面分组的第1,2,3组模式所匹配到的内容
  • 或 需要配合-E使用

    • a|b a或b
    • C|cat C或cat
    • (c|C)at cat 或 Cat

    image-20200408172107417

  • 扩展正则表达式

    • 元字符基本一致,优点为不需要使用反斜线进行转移

3. 示例

1、找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;
grep "^[Ss]" /proc/meminfo
grep -i "^s" /proc/meminfo     
grep  -E "^(s|S)" /proc/meminfo 
2、显示当前前系统上root、centos或user1用户的相关信息;
grep -E "^(root|centos|user1)" /etc/passwd
3、找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
 grep  -E  "[_[:alnum:]]+\(\)"  /etc/rc.d/init.d/functions 				
4、使用echo命令输出一绝对路径,使用egrep取出基名;				
echo "/var/log/messages" | grep -Eo "[^/]+/?$"
5、找出ifconfig命令结果中的IP地址;🐷
ifconfig | grep -Eo "\<(([0-9]|[1-9][0-9]|1([0-9]){2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1([0-9]){2}|2[0-4][0-9]|25[0-5])"					

4. 相关资料

正则表达式入门30分钟