08月27日的作业
正则表达式:
(RegularExpression,在代码中常简写为rex、regexp或RE)
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。通常被用来检索、替换符合某个模式的文本。
正则表达式是指一类字符书写的模式(pattern)这些字符成为元字符,元字符不表示其字面意义,而用于表示通配或控制功能。
正则表达式包括两类:基本正则表达式,扩展正则表达式
grep命令只支持基本正则表达式;
egrep支持扩展正则表达式("e" 表示扩展),
fgrep表示fast grep,不支持正则表达式,所有的元字符都被当做普通字符处理,搜索速度很快。
<<========================================【grep】========================================>>
grep命令
功能:
globalsearch regular expression(RE) and print out the line
全局搜索正则表达式,并把模式所匹配到的整行显示出来
格式:
grep[options] 'PATTERN' file,...
常用选项:
--color=auto 指定颜色
-v 反向匹配,显示不能被模式匹配到的行
-o 仅匹配被模式匹配到的字串,而非整行
-i 不区分大小写,ignore-case
-E 支持扩展
-A # 还显示模式下面的一行
-B # 还显示模式上面的一行
-C # 前后各显示一行
元字符:
. 任意单个字符
* 匹配其前面的字符任意次;
.* 匹配任意长度的任意字符
\? 匹配其左侧0次或1次
\+ 其左侧字符至少出现1次
[]: 指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
[0-9], [[:digit:]]
[a-z], [[:lower:]]
[A-Z], [[:upper:]]
[[:alpha:]]
[[:alnum:]]
[[:space:]]
[[:punct:]]
次数匹配:
\{m\} 匹配m次
\{m,n\} 匹配至少m次,至多n次
\{m,\} 至少m次;多则不限
\{0,n\} 至多n次;
位置锚定:
^ 锚定行首,用于模式的最左侧
^CHARACTER
$: 锚定行尾,用于模式的最右侧
CHARACTER$
\<CHARACTER 锚定词首,\bCHARACTER
CHARACTER\> 锚定词尾,CHARACTER\b
锚定单词:
\<KEYWORD\>
\bKEYWORD\b
^$: 锚定空白行
分组:
\(\)
\(ab\)*xy
引用:
\1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
\2
...
<<========================================【egrep】========================================>>
egrep命令
grep-e PATTERN [FILE...]
egrep[OPTIONS] PATTERN [FILE...]
★egrep和grep用法、选项、元字符都一样,
不同的地方就是匹配次数和分组的时候特殊字符无需再使用\转义
次数匹配:
* 匹配其前面的字符任意次;
? 匹配其前面的字符0或1次;
+ 匹配其前面的字符至少1次
{m} 匹配其前面的字符m次;
{m,n} 至少m次,至多n次
{m,} 至少m次;
{0,n} 至多n次;
位置锚定:
^ 锚定行首,用于模式的最左侧
^CHARACTER
$: 锚定行尾,用于模式的最右侧
CHARACTER$
\<CHARACTER 锚定词首,\bCHARACTER
CHARACTER\> 锚定词尾,CHARACTER\b
锚定单词:
\<KEYWORD\>
\bKEYWORD\b
^$: 锚定空白行
分组:
()
(ab)*xy
引用:
\1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
\2
...
|: 或者, ac|bc
grep -E "s(C|c)hool"
结果是:sChool,或school
fgrep:(f=fast)快速匹配,不解析正则表达式
作业:
显示/etc/passwd文件中以bash结尾的行
# grep bash$ /etc/passwd
显示/etc/passwd文件中的两位数或三位数
# grep "\<[0-9]\{2,3\}\>" /etc/passwd
显示`netstat-tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
#netstat -tan | egrep "\<LISTEN\>[[:space:]]{0,}$"
添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);
而后找出/etc/passwd文件中用户名与其shell名相同的行
# useradd bash;useradd testbash;useradd basher;useradd -s /sbin/nologin nologin
# egrep '(^[[:alpha:]]+\>).*\1' /etc/passwd
显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
# egrep '(^\<root\>|^\<centos\>|^\<user1\>)' /etc/passwd |cut -d: -f3,7
找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
# grep "\<[[:alpha:]_]\+\>()" /etc/rc.d/init.d/functions
使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
# echo "/etc/rc.d/init.d/functions/"|egrep -o "[^/]+/?$"|cut -d/ -f1
# echo "/etc/rc.d/init.d/functions/"|egrep -o ".+/[^/]"|cut -d/ -f1-4
找出ifconfig命令执行结果中1-255之间的数字
# ifconfig|egrep -o "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
本文出自 “志存高远” 博客,谢绝转载!