shell脚本归纳总结(二)

来源:互联网 发布:淘宝女装分类宝贝图片 编辑:程序博客网 时间:2024/06/08 09:25

grep及正则表达式

参考:《linux shell脚本攻略 P-120》
命令
grep: 根据模式搜索文本,并将符合模式的文本行显示出来
Pattern: 模式,由文本字符和正则表达式元字符组合而成的匹配条件
说明: grep 命令只支持由基本正则表达式组成的模式匹配进行文本搜索
语法
grep [options] pattern [file…]

选项
-i 查找时忽略字符大小写
–color 将匹配的字符用颜色显示
-v 显示没有被模式匹配到的行
-o 只显示被模式匹配到的字符串
-E(=egrep) 使用扩展正则表达式

用法示例
1)将匹配的字符用颜色显示
[root@minion2 ~]# grep –color ‘root’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

元字符与通配符区别
1)通配符
一般只用于文件名匹配,它是由shell解析的,所谓的系统level的概念非常模糊。什么是系统level? 我们知道shell是一个命令解释器,它是内核的外壳,用于完成操作系统使用者与内核的沟通; 因此,通配符实际上就是一个shell解释器去解析的符号,它的特殊含义是由shell这个命令解释器赋予的。通配符的英文名是wildcard, 就是万用牌的意思;一般来说,Unix系统上面的shell大多将三个特殊符号当做通配符,它们是* ? […] ,其中,* 表示匹配任意长度的任意字符; ? 表示匹配一个任意字符,而[…]则表示匹配括号中列出的字符中的任意一个。

2)元字符
什么是正则表达式?可以把正则表达式看成是一种字符串匹配模式标准。这里最重要的是,它本身,只是一种业界流行的标准,或者说,相当于对字符串匹配模式的一种规定。
这种规定是随着相关的工具软件的发展而自称体系的“不成文规矩”

所以,正则表达式是一种对字符串模式的描述和规定—并且是一种标准。而不同的工具
程序,也就是egrep, sed, awk 这样的程序,以各种程度来支持这种字符串搜索模式

二者的主要区别:具体在什么地方使用
通配符: 只要是shell命令行或者shell脚本中,都可以使用通配符;
正则表达式:当使用能够支持正则表达式的工具软件进行字符串处理时,就可以使用正则表达式;还可以在支持正则表达式的语言中使用正则表达式,比如perl, java…C++ 中有专门用于支持正则表达式的库。

正则表达式语言由两种基本字符类型组成:原义(正常)文本字符和元字符。
元字符使正则表达式具有处理能力。所谓元字符就是指那些在正则表达式中具有特殊意义的字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式。

通配符:
* 任意长度的任意字符
? 任意单个字符
[ ] 指定范围内的任意字符
[ ^ ] 指定范围外的任意字符

正则表达式(Regular Expression)

元字符:
. 匹配任意单个字符
[root@minion2 ~]# grep –color ‘r..t’ /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

用来表示字符个数的元字符:
* 表示匹配其前面的字符任意次
a* b 表示a 出现任意次之后,后面跟了个b

[ ] 表示匹配指定范围内的任意单个字符
[ ^ ] 表示匹配指定范围外的任意单个字符

字符集合:
[:digit:]: 所有数字集合
[:lower:]: 所有小写字母集合
[:upper:]:所有大写字母集合
[:space:]:所有空白字符集合
用法示例:
1)找出文件中以数字结尾的行
[root@minion2 ~]# grep ‘[[:digit:]]$’ /etc/inittab

5 - X11

次数匹配
* 匹配其前面出现的字符任意次
\? 匹配其前出现的字符1次或0次
{m,n}: 匹配其前出现的字符至少m次,至多n次
.* 匹配任意长度的任意单个字符
a.*b 匹配以a开头,b结尾,中间跟任意字符

位置锚定:
^ 锚定行首,此字符后面的任意内容必须出现在行首
锚定行尾 ,此字符前面的任意内容必须出现在行尾  
^
表示空白行

\<或\b: 锚定词首,其后面的字符必须作为单词首部出现
>或\b: 锚定词尾,其前面的任意字符必须作为单词尾部出现
\

原创粉丝点击