[linux命令] grep使用梳理

566 阅读4分钟
原文链接: blog.csdn.net

  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’
| | te st
. 匹配一个非换行字符 ‘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快