grep介绍
全拼: Global search REgular expression and Print out line.
作用: 文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行。
模式: 有正则表达式的 元字符 及 文本字符 所编写出的 过滤条件;grep命令是Linux 系统中最重要的命令之一,功能是从 文本文件或管道数据流中筛选匹配的行和数据,如果在配合正则表达式,功能十分强大,是Linux运维人员必备的命令。
grep常用命令
语法:
grep [options] [pattern] file
命令 参数 匹配模式 文件数量
-i : ignorecase,忽略字符大小写;
-o : 进现实匹配到的字符串本身
-v ,--invert-match : 显示不能被模式匹配到的行 取反
-E : 支持使用扩展的正则表达式元字符
-q , --quiet, --silen : 静默模式,即不输出任何信息
一下是一些常用参数
参数选项 | 解释说明 |
-v | 取反 |
-n | 显示匹配的行和行号 |
-i | 不区分大小写 |
-c | 只统计匹配到的行的数量 |
-E | 使用egrep命令使用正则 |
--cloear=auto | 为grep过滤添加颜色 |
-w | 只是匹配过滤的单词 |
-o | 只输出匹配的内容 |
grep案例
案例1:查找 /etc/passwd 文件中的root和Root并显示行号
grep -in 'root' /etc/passwd
案例2:查找 /etc/passwd 文件中又多少行中有 root 账户
grep -cw 'root' /etc/passwd
案例3:查找dome2中有几行非空行
grep -vc '^$' dome2 也可以按照后面来 grep -c '.' dome2
案例4:查找dome2中的内容不要空行和注释行并打印行号
grep -vn '^$' dome2 | grep -v '^#'
案例5:查找dome2中的内容以A开头的行
grep '^A' dome2
案例6:查找dome2中的内容以 . 结尾的行
grep '\.$' dome2
案例7:查找 /etc/passwd 中允许登录的账户 (结尾已 /bin/bash的账号都允许登录)
grep '\/bin\/bash$' /etc/passwd
案例8: 查找 dome2文件 任意一个3位字符 包括ou
grep '.ou' dome2
案例9:查找dome2文件中 所有的小写字母
grep [a-z] dome2
案例10: 查找dome2文件中 找出除了 数字以外的字符
grep [^0-9] dome2
案例11:查找dome2文件中 不包含数字的行 并且 不查找空行以及备注
grep -v '[0-9]' dome2 | grep -v '^$' | grep -v '^#'
grep扩展正则表达式案例
案例1:按照扩展正则表达式 查找dome2中的内容不要空行和注释行并打印行号
grep -Evn '^$|^#' dome2
案例2:按照扩展正则表达式 查找dome2文件中 不包含数字的行 并且 不查找空行以及备注
grep -Ev "[0-9]|^$|^#" dome2
案例3: 匹配dome2文件中的rr 1次或者多次
grep -E 'rr+' dome2
案例4: 匹配dome3文件中的go?d 0次或者1次
grep -E 'go?d' dome3
案例5: 查找server下面以json结尾 文件名包含m 和 c的文件
find /server/ -name '*.json' | grep -E 'm|c'
案例6:查找 dome3中的grad和gead
grep -E "g(r|e)ad" dome3
案例7:查找dome4中 l..e前后都有并且数据一致的行
grep -E '(l..e).*\1' dome4
(l..e) 表示一组
.* 表示匹配任意字符
\1 在这里表示调用第一个()组 也就是(l..e) \2表示调用第二个()组 \n表示调用第n个()组
案例8: 查找dome4以a开头以e结尾的所有单词
grep -Eo '\ba/a-zA-Z/*e\b' dome4
\b 单词分割