[linux命令] grep使用梳理

13 篇文章 0 订阅

  grep(globally search a regular expression and print)以正规表示法进行全域查找并打印,grep是一个最初用于unix操作系统的命令行工具,在给出文件列表或标准输出后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或不匹配)的行或文本。
  

一、查找规则

grep命令的语法为:

grep [option(s)] pattern [file(s)]

grep查找的主要option可选项功能描述如下:

option功能描述
-A 显示匹配规则的行,并显示该行后的x行
-B 显示匹配规则的行,并显示该行前的x行
-c统计符合规则的行数
-C 显示匹配规则的行,并显示该行前后的x行,等同于 -x
-e patternList指定一个或多个搜索模式
-E将每个规则当作扩展的正则表达式(ERE),ERE空值可匹配所有行
-F将指定的模式视作字符串而不是正则表达式
-f指定规则文件,查找匹配规则文件中定义规则的行
-h不展示符合规则行所在的文件名
-H展示符合规则行所在的文件名
-i比较时,大小写不敏感
-l展示匹配规则的行所在的文件名
-L展示不匹配规则的文件的文件名
-n展示匹配规则的行编号
-q禁止输出到标准输出
-r/-R在当前目录及子目录下查询,等同于 -d recurse
-s禁止输出错误信息
-v展示与指定规则不匹配的行
-w展示按单词匹配的行
-x展示精确匹配规则的行
-o展示精确匹配规则的部分
二、正则表达式

grep pattern部分的正则表达式基本元素:

元素功能描述范例
^锚定行首‘^test’
||test
.匹配一个非换行字符‘te.t’
*匹配零个多个字符‘*test’
\<匹配行首‘\
\>匹配行尾‘test\>’
x\{m\}连续重复字符’x’ m次‘te\{3\}st’
x\{m,\}连续重复字符’x’至少m次‘te\{2,\}st’
x\{m,n\}连续重复字符’x’至少m次,至多n次‘te\{2,\}st’
\w匹配一个文字或字符‘test\w*’ (零个或多个文字或字符)
\W匹配一个非单词字符‘test\W’
\b单词锁定功能‘\btest\b’
[]匹配一个字符t[Ee]st
[-]匹配一个指定范围的字符[a-zA-Z]
[^]不匹配一个范围的字符[^0-9]
\d匹配一个数字字符‘\d’ (相当于’[0-9]’)
\D匹配一个非数字字符‘\D’ (相当于’[^0-9]’)
\w匹配一个单词字符‘\w’ (相当于’[a-zA-Z0-9]’)
\W匹配一个非单词字符‘\W’ (相当于’[^a-zA-Z0-9]’)
\s匹配一个空白字符,如空格、制表、换行等‘\s’ (相当于’[\f\n\r\t\v]’)
\S匹配一个非空白字符‘\S’ (相当于’[^\f\n\r\t\v]’)
\b匹配一个单词边界‘\b’
\B匹配一个非单词边界‘\B’
三、使用范例
3.1 option应用
  • 1.查找文本中匹配pattern1或者pattern2的行 (-e)
grep -e 'pattern1' -e 'pattern2' test.txt
  • 2.查找不匹配规则的行 (-v)
grep -v '^test' test.txt  
  • 3.查找不匹配pattern1且不匹配pattern2的行
grep -v 'pattern1' test.txt | grep -v 'pattern2'
  • 4.将查找到的关键字高亮 (–color)
grep --color=auto 'pattern' test.txt

注:可在~/.bash_profile中添加alias grep=’grep –color=auto’

  • 5.递归查找当前目录及其子目录中的匹配内容 (-r)
grep -r 'pattern' *
  • 6.查看文件中规则匹配的行数 (-c)
grep -c 'pattern' test.txt
  • 7.查找空白行并显示行号 (-n)
grep -n '^$' test.txt
  • 8.查找只包含数字的行 (-x)
grep -x '[0-9][0-9]*' test.txt
  • 9.根据规则文件查询匹配规则的行 (-f)
grep -f patternFile test.txt
3.2 正则应用
  • 1.查找以小写字母开始的行
grep '^[a-z]' test.txt
  • 2.查找非字符开始的行
grep '^[^a-zA-Z]' test.txt
四、egrep、fgrep
  • 1.查找匹配pattern1或pattern2的行 (| : 按或方式查找)
grep -E 'pattern1|pattern2' test.txt
或
grep 'pattern1\|pattern2' test.txt
或
egrep 'pattern1|pattern2' test.txt
  • 2.查找包含一个或多个数字0的行 (+ : 一个或多个)
grep -E '0+' test.txt
或
grep '0\+' test.txt
或
egrep '0+' test.txt
  • 3.查找包含一个或多个no的行 (() : 按群组查找)
grep -E '(no)+' test.txt
或
grep '(no)\+' test.txt
或
egrep '(no)+' test.txt
  • 4.查找匹配n或no的行 (? : 零个或是一个 )
grep -E 'no?' test.txt
或
egrep 'no?' test.txt

注:fgrep职能查找固定文本,速度比grep快

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值