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