文本处理工具grep、egrep的具体用法
一、grep、egrep含义
grep:(global search regular expression(RE)and print out the line);文本搜索工具,根据用户指定的文本模式(PATTERN)对目标文件进行逐行搜索,并显示能够被模式匹配到的行。
egrep:相当于 grep -E ;使用扩展正则表达式来构建模式。
为了更好的阅读和区分其中的元字符和选项,都以红色和加粗标识出来。
在文中截图中的命令egrep没有使用选项加颜色,使用的是临时更改的环境变量:命令:
export GREP_OPTINOS='--color=auto'
export GREP_COLOR='01;31'
二、基本用法
1、格式:grep [options] 'PATTERN' file, ...(可以指定多个文件)
--color=auto:可以高亮显示匹配到的内容;
2、参数
2.1:常用参数
-v:反向显示,显示不能被模式所匹配到的行;
-o:只显示被模式匹配到的字串,而非整行;
-i:不区分字符大小写。ignore-case;
-E:支持扩展正则表达式;
-A#:显示匹配到的内容及其下面#行;
-B#:显示匹配到的内容及其上面#行;
-C#:显示匹配内容及其上下各#行;
2.2:其他参数
-s或--no-messages: 不显示错误信息。
-V或--version: 显示版本信息。
-w或--word-regexp: 只显示全字符合的列。
-x或--line-regexp: 只显示全列符合的列。
-y: 此参数的效果和指定“-i”参数相同。
--help 在线帮助。
同时也可以使用man grep来查看具体的详细参数与说明。
三、正则表达式
1、含义:正则表达式(Regular Expression);正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。
基本正则表达式和扩展正则表达式:工作于贪婪模式,尽可能长的匹配字符;
2、基本正则表达式元字符
字符匹配:
.:匹配任意单个字符;
[]:匹配指定范围内的任意单个字符;
范围:
[^]:匹配指定范围外的任意单个字符;
次数匹配:
*:匹配其前面字符的任意次;0次或多次
.*:匹配任意长度的任意字符;
\?:匹配其前面字符的0次或1次;
\{m\}:匹配m次;
\{m,n\}:匹配至少m次,至多n次;
\{m,\}:匹配至少m次;
\{0,n\}:匹配至多n次;
位置锚定:
^:锚定行首;
$:锚定行尾;
\<|\b:锚定词首;
\>|\b:锚定词尾;
^$:为空白行;
分组:
\(\):分组
\#:#为数字;对分组的字符串基于位置进行引用;
例:\1;引用前面的第一个左括号以及与之对应的右括号中的模式所匹配的内容。
3、扩展正则表达式元字符:大部分与正则表达式的元字符是相同的,但是\转义符是不需要添加的。
字符匹配:
.:任意单个字符;
[]:指定范围内的任意单个字符;
[^]:指定范围外的任意单个字符;
次数匹配:
*:其前面的字符任意次;
?:匹配其前面的字符0次或1次;
+:匹配其前面的字符至少1次;
{m}:匹配其前面的字符m次;
{m,n}:至少m次,至多n次;
{m,}:至少m次;
{0,n}:至多n次;
锚定:与基本正则表达式相同;
分组:
():分组;
|:或者;
四、具体的实例
显示/proc/meminfo中以大小写S开头的行;
取出默认shell为非bash的用户;
显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;
添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户;
写一个匹配规则可以匹配IP地址:1.0.0.1--223.255.255.254
1
|
egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-2][0-3])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]?[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"
|
本文转自Mr_陈 51CTO博客,原文链接:http://blog.51cto.com/chenpipi/1360509,如需转载请自行联系原作者