三大搜索利器 -- grep

grep 的作用


  在文件中查找并显示包含指定字符串的行

grep 格式


   grep [选项] ... 查找条件 目标文件

常用选项


  •  -i : 查找时忽略大小写;
  • -v : 反转查找, 输出与条件不相符的行;
  • -c : PATTERN 成功匹配到内容的次数;
  • -n : 显示行号;
  • -m : 匹配的内容最大输出的行数, -m 3 表示只输出 3 行;
  • -e : 使用模式匹配, 可多次使用 -e 进行多个匹配;
  • -o : 只打印匹配到的内容;
  • -w : 匹配整个单词;
  • -x : 匹配整行;
  • -q : 静默执行;
  • -s : 无提示, stderr会被忽略, -sq 组合可完全屏蔽 grep 的输出;
  • -a : 当认为文件是二进制文件时, 使用 -a;
  • -E : 扩展正则表达式, 相当于使用 egrep;
  • -H : 输出文件名, 在行内容前, 当目标文件为多个时, 默认;

示例


// *********************************** 示例 一 ************************************
// 过滤出用户 tian 的行
grep 'tian' passwd 
    tian:x:502:502::/home/tian:/bin/bash

// *********************************** 示例 二 ************************************
// 过滤掉以 "#" 开头的行及空行
grep -v "^#" /etc/yum.conf |grep -v "^$"    //grep -Ev "^#|^$" /etc/yum.conf 及 egrep -v "^#|^$" /etc/yum.conf 相同效果;
    [main]
    cachedir=/var/cache/yum/$basearch/$releasever
    keepcache=0
    debuglevel=2
    logfile=/var/log/yum.log
    exactarch=1
    obsoletes=1
    gpgcheck=1
    plugins=1
    installonly_limit=5
    bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
    distroverpkg=centos-release

// *********************************** 示例 三 *************************************
// -c 匹配到的次数
grep -c '^root' passwd
 1

// *********************************** 示例 四 *************************************
// -i 忽略大小写;
grep -i 'root' /etc/ssh/sshd_config 
 #PermitRootLogin yes
 # the setting of "PermitRootLogin without-password".
 #ChrootDirectory none

// *********************************** 示例 五 *************************************
// -n 输出匹配到内容的行号
grep -n '^root' passwd 
 1:root:x:0:0:root:/root:/bin/bash
 
// *********************************** 示例 六 *************************************
// 使用正则
// [] 匹配括号中任意字符
grep -n "^[abcd]" passwd 
 2:bin:x:1:1:bin:/bin:/sbin/nologin
 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
 4:adm:x:3:4:adm:/var/adm:/sbin/nologin
 16:dbus:x:81:81:System message bus:/:/sbin/nologin
 18:abrt:x:173:173::/etc/abrt:/sbin/nologin
 26:apache:x:48:48:Apache:/var/www:/sbin/nologin
 
// [] 中使用范围
grep -n "^[a-d]" passwd 
 2:bin:x:1:1:bin:/bin:/sbin/nologin
 3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
 4:adm:x:3:4:adm:/var/adm:/sbin/nologin
 16:dbus:x:81:81:System message bus:/:/sbin/nologin
 18:abrt:x:173:173::/etc/abrt:/sbin/nologin
 26:apache:x:48:48:Apache:/var/www:/sbin/nologin

// ********************************** 示例 七 **************************************
// ?; 单独的?是不支持基本表达式;
grep -n '[od][ors][lnm]?' test 
 1:good good study
 3:good
 5:goood
 6:goolld
grep -En '[od][ors][lnm]?' test 
 1:good good study
 3:good
 5:goood
 6:goolld
 
// * 匹配0次或多次, 
grep -n "go*" test 
 1:good good study
 3:good
 4:gold
 5:goood
 6:goolld
 
// + 匹配一次或者多次
grep -En "goo+" test 
 1:good good study
 4:good
 6:goood
 7:goolld

// 匹配之前项至少m次
grep -En "go{2,}" test 
 1:good good study
 4:good
 6:goood
 7:goolld
 
// 匹配其中一个
grep -En "go(g|o)" test 
 1:good good study
 3:gogogo
 4:good
 6:goood
 7:goolld
原文地址:https://www.cnblogs.com/haorong/p/10730301.html