shell三剑客之grep 全局搜索工具 详解

目录

grep 全局搜索工具

①grep基本原理

②grep语法结构

OPTION选项

PATTERN模式——正则表达式

③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

仅输出能够精确匹配整个单词的行,对于匹配内容进行边界限定
相当于
"\<word\>"

-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:]]"

匹配大写字母
grep -x "[[:lower:]]*" 1.txt 只输出只有小写字母的行

"[[:upper:]]"

匹配小写字母
grep -x "[[:upper:]]*" 1.txt 只输出只有大写字母的行

 

反斜线字符与特殊表达式

正则表达式

描述

"\b"

匹配单词边界处的空字符,grep中的单词有数字、字母、下划线组成,其他字符都是单词的分隔符
grep "\bword\b" file :匹配打印含有word单词的行,不打印不是单词word而含有word的行
可以打印
word,而words不可以打印

"\B"

"\b"相反,表示匹配非单词边界的空字符
grep "\Bword\B" file :匹配不打印word单词的行,打印不是单词word而含有word的行

"\<""\>"

匹配单词起始和结束位置处的空字符 "\<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" :逻辑与

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值