正则表达式及grep
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式及grep相关的知识,希望对你有一定的参考价值。
一、正则表达式
正则表达式 Regular Expression ,简称REGEXP,用来检索、替换某些符合某个模式的文本。
正则表达式元字符有:
. :匹配任意单个字符
[] :匹配指定范围内的单个字符
[^] :匹配指定范围外的 单个字符
字符集和有(可以使用man grep查看):[:alnum:], [:alpha:], [:cntrl:], [:digit:], [:graph:], [:lower:], [:print:], [:punct:], [:space:], [:upper:], [:xdigit:]
匹配次数(贪婪模式匹配尽可能多的)
* :匹配前面的字符任意次数
? :匹配前面的字符一次或0次
{m,n} :匹配前面的字符至少m次,最多n次
列如有字符:a,b,ab,abb,aab,axb,amnb,那么a*b,a?b,a.*b会匹配到的字符串有:
a*b(表示a可以出现任意次可以没有,后面接字符b) :b, ab,abb,aab,axb,amnb
a?b(表示a可以出现一次或0次,后面接字符b,问号要转义) :b,ab,abb,aab,axb,amnb
a.*b(表示ab之间可以有任意字符):ab,abb,aab,axb,amnb
a{1,3}b(表示a最少出现1次,最多出现3次):ab,abb,aab
(以上使用grep测试得出)
位置锚定,即匹配指定位置出现的字符串
^ :锚定行首,后面出现的字符串只能在行首出现
$:锚定行尾,后面出现的字符串只能在行尾出现
^$:匹配空白行
<或 :其后面出现的字符必须作为单词的首部出现
>或 :其后面出现的字符必须作为单词的尾部出现
分组:
():一般和1,2,3一起使用
二、grep
grep:根据模式搜索,并将模式的文本行显示出来
用法:grep [OPTIONS] PATTERN [FILE...]
PATTERN:是文本字符和元字符组合而成的匹配条件
常用参数:
-i :忽略大小写
-o :仅显示匹配到的字符串
-v:取反,显示匹配到的以外的字符串
--color:将匹配到的字符串显示颜色
例如:
新建grep.txt文本,内容如下:
she like his liker.
he love she also love.
he like his lover.
1.列出符合 l..e 的行(l和e之间占任意两个字符)
2.只显示匹配到的字符串 -o
3.忽略大小写匹配 -i
4.取反 -v
5.显示/proc/meminfo文件中以不区分大小的s开头的行;
grep -i ‘^s‘ /proc/meminfo
grep ‘^[sS]‘ /proc/meminfo
6.显示/etc/passwd中以nologin结尾的行;
grep ‘nologin$‘ /etc/passwd
7.取出默认shell为/sbin/nologin的用户列表
grep "nologin$‘ /etc/passwd | cut -d: -f1
8.取出默认shell为bash,且其用户ID号最小的用户的用户名
grep ‘bash$‘ /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1
9.显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;
grep "^#[[:space:]]{1,}[^[:space:]]" /etc/inittab
10.显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;
grep ‘:[0-9]:‘ /etc/inittab
11.显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行;
grep ‘^[[:space:]]{1,}‘ /boot/grub/grub.conf
12.显示/etc/inittab文件中以一个数字开头并以一个与开头数字相同的数字结尾的行;
grep ‘^([0-9]).*1$‘ /etc/inittab
13.找出/proc/cpuinfo文件中的,1位数,或2位数;
grep ‘[0-9]{1,2}‘ /proc/cpuinfo (找出满足有一位或两位数字的行)
grep --color ‘<[0-9]{1,2}>‘ /proc/cpuinfo (找出满足有一位或两位数字的行,且这数字只能是一个单词)
14.查找当前系统上名字为student(必须出现在行首)的用户的帐号的相关信息, 文件为/etc/passwd
grep ‘^student>‘ /etc/passwd
或者 id student
三、其它
正则表达式用法很灵活,较复杂,更多的用法上百度查找。
正则表达式和通配符的区别,不要搞混淆了,想了解通配符查看“bash及其特性“文档。
以上是关于正则表达式及grep的主要内容,如果未能解决你的问题,请参考以下文章