Linux grep命令的一些使用体会

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux grep命令的一些使用体会相关的知识,希望对你有一定的参考价值。

Linux grep 命令

Linux系统中grep,egrep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

1.grep : 最早的文本匹配程序,使用POSIX定义的基本正则表达式(BRE)来匹配文本。
2.egrep : 扩展式grep,其使用扩展式正规表达式(ERE)来匹配文本。
3.fgrep : 快速grep,这个版本匹配固定字符串而非正则表达式。并且是唯一可以并行匹配多个字符串的版本。

grep语法格式:
grep [option]... ‘PATTERN‘ FILE...

options:
-E : 使用扩展正则表达式进行匹配, grep -E 或取代 egrep 命令。
-F : 使用固定字符串进行匹配, grep -F 或取代传统的fgrep命令。

-A #:显示匹配字符串的后面所有行。
-B #:显示匹配字符串的前面所有行。
-C #:显示匹配字符串的前面后面的行。
-e : 通常第一个非选项的参数认为是要匹配的模式,也可以同时提供多个模式,只要将其放入单引号,并用换行字符分隔他们。
  模式以减号开头时,为防止混淆其为选项,-e选项说明其后的参数为模式,即使他以减号开头。
-f : 从pat-file文件读取模式作为匹配。
-i : 模式匹配时忽略大小写差异。
-l : 列出匹配模式的文件名称,而不是打印匹配的行。
-q : 静默的,如果匹配成功,不将匹配的行输出到标准输出;否则即是不成功。
-s : 不显示错误信息,通常与-q并用。
-v : 取反。
-o: 仅显示匹配的字串,而非字串所在的行。
--color=auto: 匹配的字符出现颜色。
-n:显示匹配行及行号。
-c 只输出匹配行的计数。
说明:可以同时查找多个文件中的内容,当指定多个文件时,每个显示出的文件行前会有文件名加一个冒号标识其来自哪个文件。
可以使用多个-e 或 -f 选项,建立要查找的模式列表。

正则表达式:
是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;

元字符:
不表示其字面意义,而用于额外功能性描述

正则表达式:
正则表达式引擎

基本正则表达式:没有特殊意义的字符 grep
扩展正则表达式: 元字符,有在正则表达式中有特殊意义 egrep,grep -E
fgrep: fast, 不支持使用正则表达式

字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9], [[:digit:]] : 数字字符
[a-z], [[:lower:]] :小写字母字符
[A-Z], [[:upper:]] :大写字母字符
[[:space:]] :空格字符
[[:punct:]] :标点符号字符
[[:alpha:]] :字母字符
[[:alnum:]] :数字字符

次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
*: 任意长度,它前面的字符可以出现任意次
例如:a*b
aab, abb, b,
\?: 0次或1次,它前面的字符是可有可无的
例如:a\?b
ab, b, cb
{m}: m次,它前的字符要出现m次
例如:a{2}b
ab, aab, b, aaaab, abb
{m,n}: 至少m次,至多n次
例如:a{2,5}b
ab, b, aab
{m,}:至少m次
{0,n}: 至多n次

位置锚定:
^ : 行首锚定;匹配紧接着的正则表达式,BRE中仅在正则表达式的开头有特殊的含义,ERE中在任何位置都有特殊含义
写在模式最左侧

$: 行尾锚定:匹配前面的正则表达式,在字符串或者行结尾处。BRE中仅在正则表达式的结尾处有特殊的含义,ERE中在任何位置都有特殊含义
    写在模式最右侧

^$:  匹配空白行
\   :  通常用于打开或关闭后续字符的特殊含义,如\(...\)与\{...\}
[]  : 匹配方括号内的任一字符,其中可用连字符(-)指的连续字符的范围;^符号苦出现在方括号的第一个位置,则表示匹配不在列表中的任一字符,

不包含特殊字符的连续字符组成的串叫单词:
\<: 词首,出现于单词左侧,\b
\<char
\>: 词尾,出现于单词右侧, \b
char\>

扩展正则表达式:
字符匹配:
.
[]
[^]
次数匹配:
:任意次
?: 0次或1次
+: 至少1次
{m}: 精确匹配m次
{n,m}: {n}指重现n次;{n,m}指重现n至m次
{m,}:至少m次
{0,n}:至多n次
锚定:
^
$
\<, \b
\>, \b
^$, ^[[:space:]]
$
分组:
()
引用:\1, \2, \3

或者:
a|b: a或者b
con(C|c)at
concat或conCat?
conC或cat

grep -E ‘PATTERN‘ FILE...
egrep ‘PATTERN‘ FILE...

常用Linux/Unix工具中的表示法

PCRE记法 vi/vim grep awk sed
* * * * *

注:PCRE中常用\b来表示“单词的起始或结束位置”,但Linux/Unix的工具中,通常用\<来匹配“单词的起始位置”,用\>来匹配“单词的结束位置”,sed中的\y可以同时匹配这两个位置。

以上是关于Linux grep命令的一些使用体会的主要内容,如果未能解决你的问题,请参考以下文章

常用的linux命令大全

linux命令学习— grep 命令学习

linux命令——grep

Linux正则表达式及grep命令

Linux输入输出重定向和文件查找值grep命令

关于Linux学习中的问题和体会