grep
Global search REgular expression and Print out the line
作用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查,打印匹配到的行
模式:由正则表达式的 元字符 及 文本字符 所编写出的 过滤条件
语法:
grep [options] [pattern] file
命令 参数 匹配模式 文件数据
-i : ignorecase,忽略字符的大小写;
-o : 仅显示匹配到的字符串本身;
-v, --invert-mathch:显示不能被模式匹配到的行;
-E : 支持使用扩展的正则表达式元字符;
-q, --quiet, --silent: 静默模式,即不输出任何信息。
grep命令是Linux系统中最重要的命令之一,功能是从 文本文件 或 管道数据流 中筛选匹配的 行 和 数据,如果再配合正则表达式,功能十分强大,是Linux运维人员必备的命令;
grep命令里的 匹配模式 就是你想要找的东西,可以是 普通的文字符号,也可以是正则表达式。
参数选项 | 解释说明 |
---|---|
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-c | 只统计匹配的行数 |
-E | 使用egrep的命令 |
–color=auto | 为grep过滤结果添加颜色 |
-w | 只匹配过滤的单词 |
-o | 只输出匹配的结果 |
通用正则表达式实践
grep -i "root" pwd.txt -n
# 输出pwd.txt文件中 有root字符串的行 -i 忽略大小写,-n 显示行号
grep -r "root" pwd.txt -c
# 找出有几行有root
grep '^$' tmp.txt -n
# 显示空行
grep '^$' tmp.txt -n -v
# 显示除了空行别的内容
grep '^#' tmp.txt -v
# 显示除注释以外的内容
grep '^#' tmp.txt -v | grep '^$' -v
# 显示除空行除注释的内容
grep -n "\.$" tmp.txt
# 找出以.结尾的行内容
grep '.*' tmp.txt
# 贪婪匹配
grep ".*e" tmp.txt # 以e结尾的行内容
[abc]中括号
中括号表达式,[abc]表示匹配中括号中任意一个自负,a或b或c,,常见形式如下:
- [a-z] 匹配所有小写;
- [A-Z] 匹配所有大写;
- [a-zA-Z] 匹配所有的单个大小写字母;
- [0-9] 匹配所有单个数字;
- [a-zA-Z0-9] 匹配所有数字和字母。
- [^0-9] 过滤掉0-9,其余显示出来。
扩展正则表达式实践
此处使用grep -E进行扩展正则,egrep官网已经弃用。
+号
+号表示匹配前一个字符1次或多次
grep -E "i+" tmp.txt
?号
匹配前一个字符0次或1次
grep -E "go?d" tmp.txt
# 输出god gd 不输出gooood
|符
或者
find /data -name "*.txt"
grep -E "a|x"
()小括号
将一个或多个字符捆绑在一起,当做一个整体处理
grep -E "goo|lad" tmp.txt
grep -E "g(oo|la)d" tmp.txt
括号()内的内容可以 被后面的 “\n” 正则引用,n为数字,表示 引用第几个括号的内容
grep -E "(l..e).*\1" tmp.txt
{n,m}匹配次数
grep -E "y{2,3}" test.txt -o