目录
grep 全局搜索工具
①grep基本原理
>>>grep全称global search regular expression and print 全局搜索正则表达式并打印输出
>>>grep是一个利用正则表达式进行全局搜索的工具
②grep语法结构
grep OPTIONS PATTERN INPUT_FILE_NAMES
说明:
OPTIONS 即选项
PATTERN 即模式,用正则表达式去匹配
INPUT_FILE_NAMES 即为输入的文件
OPTION选项
选项之控制匹配模式
选项 | 描述 |
-e | 指定使用此处的PATTERN作为待匹配的PATTERN |
-f File | 从File中获取pattern列表,在文件每行一个PATTERN |
-i | 忽略pattern中的大小写 |
-v | 反转匹配的行,输出不匹配的行 |
-w | 仅输出能够精确匹配整个单词的行,对于匹配内容进行边界限定 |
-x | 仅输出能够精确匹配整行内容的行 |
选项之控制输出内容
选项 | 描述 |
-c | 输出匹配到的行的数量,不输出匹配到的内容 |
-l | 输出能够被匹配到的文件名(不输出文件内容) |
-L | 输出不能被匹配到的文件名(不输出文件内容) |
-m NUM | 当匹配成功的行有NUM行时,停止读取该文件,即只输出最先匹配到的NUM行 |
-o | 只输出被匹配到的字符串 |
-q | 静默模式,立即退出 |
-s | 禁止输出因文件不存在或文件没读权限而产生的错误信息 |
选项之控制输出行的前缀
选项 | 描述 |
-b | 在每行输出之前在输入文件中打印从0开始的字节偏移 |
-n | 输出匹配内容在文件中的行号,每个文件单独从1开始 |
选项之输出行的上下文
选项 | 描述 |
-B num | 输出匹配规则那行和往上num行 |
-A num | 输出匹配规则那行和往下num行 |
-C num | 输出匹配规则那行和往上下各num行 |
选项之文件与目录的选项
选项 | 描述 |
-r | 从命令行中给定的目录中递归搜索其每个文件与子目录 |
选项之grep程序
>>>grep在默认情况下,使用普通正则表达式进行模式匹配
>>>有四种grep程序分别支持不同的搜索引擎
选项 | 描述 |
-G | 普通正则表达式引擎去解析PATTERN,需要对特殊字符进行转义 |
-E | 拓展正则表达式引擎去解析PATTERN |
-F | 不识别正则表达式,使用字符的字面意思去解析PATTERN |
-P | 使用perl正则表达式引擎去解析PATTERN |
状态码
>>>当匹配成功时,退出状态码是0
>>>当匹配发生了错误,退出状态码为2
PATTERN模式
正则表达式
>>>用于描述字符串集合的表达式
>>>基础正则表达式:对于"?"、"+"、"{}"、"|"、"()"这些字符,需要在前面加转移符"\"
正则表达式 | 描述 |
"CHAR" | 精准匹配某个字符 |
"." | 匹配任意单个字符(除换行符) |
"\?" | 匹配前一个条目零次或一次 在基本正则表达式中,使用"\?",不使用转义符"?"是一个普通字符 在扩展正则表达式中,使用"?" |
"*" | 匹配前一个条目零次或多次 |
"\+" | 匹配前一个条目一次或多次 在基本正则表达式中,使用"\+" 在扩展正则表达式中,使用"+" |
"\{N\}" | 紧跟在它前面的单元应精准匹配N次 |
"\{N,M\}" | 紧跟在它前面的单元应匹配至少N次,最后M次 |
"\{N,\}" | 紧跟在它前面的单元应匹配至少N次 |
"\{,M\}" (sed没有这个) | 紧跟在它前面的单元应匹配最后M次 |
"REGEXP1\|EXGREP2" | 连接两个子表达式,表示或的关系,并使用第一个成功匹配的表达式 在基本正则表达式中,使用"REGEXP1\|EXGREP2" 在扩展正则表达式中,使用"REGEXP1|EXGREP2" |
"REGEXP1EXGREP2" | 连接两个正则表达式,表示与的关系 |
字符类与中括号表达式
正则表达式 | 描述 |
"[LIST]" | 匹配字符列表中的任意字符 |
"[^LIST]" | 排除字符列表中的任意字符 |
"[STR1-STR2]" | 使用连字符"-"连接两个字符表示一个范围 |
"[[:alnum:]]" | 匹配大小写字母和数字,等价于"[0-9a-zA-Z]" |
"[[:alpha:]]" | 匹配大小写字母,等价于"[a-zA-Z]" |
"[[:blank:]]" | 空白字符类,包括空格和制表符 |
"[[:digit:]]" | 数字类字符表,等价于"[0-9]" |
"[[:lower:]]" | 匹配大写字母 |
"[[:upper:]]" | 匹配小写字母 |
反斜线字符与特殊表达式
正则表达式 | 描述 |
"\b" | 匹配单词边界处的空字符,grep中的单词有数字、字母、下划线组成,其他字符都是单词的分隔符 |
"\B" | 和"\b"相反,表示匹配非单词边界的空字符 |
"\<"和"\>" | 匹配单词起始和结束位置处的空字符 "\<word\>"等同于"\bword\b" |
\w | 匹配单词成分 |
\W | 匹配非单词 |
锚定符
"^" 脱字符 | 匹配行首的空字符 |
"$" 美元符 | 匹配行尾的空字符 |
③grep实战
1.列出匹配到的文件名
grep -l "ubuntu" 1.txt 2.txt
列出非匹配行的文件名
grep -lv "ubuntu" 1.txt 2.txt
列出未能匹配到的文件名
grep -L "ubuntu" 1.txt 2.txt
2.递归搜索目录
grep -r "hello" /home
3.匹配包含-的pattern
grep -e "-v" * :搜索包含"-v"的行,而不是把-v当做选项去使用
4.强制grep输出匹配行的同时又输出文件名
grep "linux" 1.txt /dev/null
5.逻辑关系
grep "a\|b" 1.txt :逻辑或
grep "a" 1.txt | grep "b" :逻辑与