您的位置:首页 > 运维架构 > Shell

shell之文本查找(文本匹配)、正则表达式

2017-05-01 01:14 232 查看
1
grep
查找文本(用unix专用的术语是“匹配文本”),非常的方便;从传统而言,有三种程序可以用来查找整个文本文件:

grep 最早的文本匹配程序。BRE(Basic Regular Expression),使用POSIX定义的基本正则表达式。
egrep 扩展grep(Extended grep)。使用扩展正则表达式(Extended Regular Expression,ERE)
fgrep 快速grep(Fast grep).
1992年时,POSIX标准将这三个版合成了一个grep程序。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep基本语法;
grep [options...]   pattern-spec    [files...]
功能:显示匹配一个或多个模式的文本行。通常会作为管道(pipe)的第一步,
以便对匹配的数据作进一步处理。

主要选项
-i  模式匹配时忽略字母的大小写差异。
-l  列出匹配模式的文件名称,而不是打印匹配的行。
-e  pat-list
通常,第一个非选项的参数会指定要匹配的模式。
-f  pat-file
从pat-file文件中读取模式作为匹配
-s  不显示错误信息。通常与-q并用
-q  静静地。如果模式匹配,则grep会成功的离开,而不将匹配的行写入标准输出;否则即时不成功。
-v  显示不匹配模式的行。
-F  使用固定的字符串进行匹配。通常 grep -F 可以取代传统的fgrep命令。
-E  使用扩展的正则表达式进行匹配,grep -E可以取代传统的egrep

示例:
/*查看a.txt的进程*/
ps -ef | grep  "a.txt"
/*显示所有以h开头的文件中包含 hello的行*/
grep ‘hello’ h*
/*显示在aa,bb,cc文件中匹配test的行*/
grep ‘test’ aa bb cc


1.1 正则表达式

正则表达式时由两个部分所组成:一般字符和特殊字符。一般字符指的是“任何没有特殊意义的字符”,特殊字符常被称为”元字符
metacharacter
“,在某些情况下,特殊字符也可以被视为”一般字符“,

POSIX BRE与ERE的meta字符
字符      BRE/EREL    模式含义
\       两者都可     通常用以关闭后续字符的特殊意义。

.       ******   匹配任意单个字符,NUL除外

*       ******   匹配在它之前的任何数目(或没有)的单个字符。
*

$       ******   匹配前面的正则表达式,在字符串或行结尾处。

[...]   ******   方括号表达式,匹配方括号内的任一个字符。连字符(-)指的是连续字符的范围。^符号置于方括号里第一个字符则由反向的含义:指的是匹配不在列表内(方括号内)的任何字符。

\{n,m\}  BRE     区间表达式,匹配在它前面的单个字符重现的次数区间。\{n\} 指的是重现n次;\{n,\}则为至少重现n次,er\{n,m\}为重现n至m次。

\( \)    BRE     将\(与\)间的模式存储在特殊的“保留空间”。最多可以将9个独立的子模式储存在单个模式中。

\n       BRE     重复在\(与\)方括号内第n个子模式至此点的模式。n为1~9的数字,1为由左开始。

{n,m}    ERE     与先前提及BRE的\{n,m\}一样,只不过方括号的前面没有反斜杠。
+       ERE      匹配前面正则表达式的一个或多个实例
?      ERE       匹配前面正则表达式的零个或一个实例
|       ERE       匹配于|符号前面或后面的正则表达式

示例:
^hello    5个字母的hello,出现在一行的开头
^hello$   正好包括hello这5个字母的一行,没有其他任何的字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell