正则表达式
正则表达式匹配的的是文本内容,
由一类特殊字符以及文本字符所编写的一个模式,模式又来匹配文件当中内容(字符).
检验我们输入的内容是否满足规定,格式,长度等等要求
主要用来匹配文本内容,命令的结果也可以用正则表达式
通配符:只用能用于匹配文件名和目录名,不能匹配文件的内容和命令结果
表达式
一般和grep配合使用
基本正则 元字符匹配
. 任意单个字符,也可以是一个汉字
ls | grep '.'
\ 转义符
ls | grep '\.' 还是所搜点号
[ ] 匹配指定范围内的任意单个字符或者数字
grep '[a-b]' xy102.txt
[ ] 匹配空格
grep '[ ]' xy102.txt
[^] 取反
grep '^a' xy102.txt 除了a之外都显示
^#
grep '^#' xy102.txt 以#号开头的
^$ 空行
grep '^$' xy102.txt
*匹配前面的字符任意次,0次也算
贪婪模式,尽可能的匹配
但goo,最多只能再多一位
例如grep 'gooi8*'
再多一位就不能了 grep 'gooi88*'
echo gggle | grep 'g*'
echo ggle | grep '1*gle'
.* 匹配前面的任意字符,至少要有1次,匹配所有,但至少要有一个
echo ggle | grep '2.*gle' 以2开头的gle,至少得有1个
? 匹配前面的字符0次或者1次,可有可无
echo gole | grep 'o\?le'
\+ 匹配的字符至少要有一次
echo gole | grep 'o\+le'
\{n\} 匹配前面的字符=n次,或者小于n,不能大于n,而且前面的字符要连续出现
grep 'a\{5\}' test1.txt
\{m,n\} 匹配前面的字符至少m次,至多n次,也需要是连续出现,超出的不在匹配范围
grep 'a\{2,5\}' test1.txt
\{,n\} 匹配前面的字符最多N次
\{,n\} 匹配前面的字符最少N次
扩展正则
1、显示/etc/passwd中以sh结尾的行;
cat /etc/passwd |grep -E '(sh)$'
2、查找/etc/inittab中含有"以s开头,并以d结尾的单词"模式的行;
cat /etc/inittab | grep -E '\bs[a-zA-Z]*d\b'
3、查找ifconfig命令结果中的1-255之间的整数;
ifconfig|grep -E '(\b1[0-9][0-9]\b)|(\b2[0-9][0-9]\b)|(\b[0-9][0-9]\b)|(\b[1-9]\b)'
4、在/etc/passwd中取出默认shell为bash的行;
cat /etc/passwd|grep -E 'bash$'
5、高亮显示passwd文件中冒号,及其两侧的字符
cat /etc/passwd|grep -E '.?😗:.?'
片转存中...(img-n2dmPNaM-1719234125285)]
5、高亮显示passwd文件中冒号,及其两侧的字符
cat /etc/passwd|grep -E '.?😗:.?'
[外链图片转存中...(img-aYlRvxQs-1719234125285)]