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 选项,建立要查找的模式列表。
正则表达式:
相关资料:http://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能;
元字符:
不表示其字面意义,而用于额外功能性描述
正则表达式:
正则表达式引擎
基本正则表达式:没有特殊意义的字符 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 |
* |
* |
* |
* |
* |
+ |
\+ |
\+ |
+ |
\+ |
? |
\= |
\? |
? |
\? |
{m,n} |
\{m,n} |
\{m,n\} |
{m,n} |
\{m,n\} |
\b * |
\< \> |
\< \> |
\< \> |
\y \< \> |
(…|…) |
\(…\|…\) |
\(…\|…\) |
(…|…) |
(…|…) |
(…) |
\(…\) |
\(…\) |
(…) |
(…) |
\1 \2 |
\1 \2 |
\1 \2 |
不支持 |
\1 \2 |
注:PCRE中常用\b来表示“单词的起始或结束位置”,但Linux/Unix的工具中,通常用\<来匹配“单词的起始位置”,用\>来匹配“单词的结束位置”,sed中的\y可以同时匹配这两个位置。
实例:
1,显示文件中以大写或小写c开头的行
2,显示文件中以r开头的行
3,将文件行尾为(2)结尾的显示出来
4,搜索文件中r与t之间有2-3个o存在的字符串
5,搜索重复一个或一个以上的字符串如
6,ifconfig命令可以显示当前主机的IP地址相关的信息等,如果使用grep等文本处理命令取出本机的各IP地址,要求不包127.0.0.1;
Linux 命令grep, egrep,正则表达式大全