shell 中的正则表达式
正则表达式就是根据你定义的模式模板进行模式匹配的一种技术,由字面文本和具有特殊意义的符号组成。下面介绍下主要规则
正则表达式的基本组成部分
一、位置标记
^,这个表示匹配字符串的开始位置
$,这个表示匹配字符串的结束位置
二、标识符
A字符,表示必须匹配A字符
. 这个点表示匹配任意一个字符,包括空字符,但有且只能必须匹配一个
[ ],中括号内可以是一个字符组或字符范围,[0-9]表示单个数字,[ab]表示匹配a或者b
[^],括号中的字符表示非,即不匹配括号中的任意一个字符
三、数量修饰符
?,表示匹配一次或0次
+,表示匹配一次或多次
*,表示匹配0次或多次
{n},表示匹配n次
{n,},表示至少匹配n次
{n,m},表示最小匹配n次,最多匹配m次
四、其他
(),圆括号的内容视为一个整体,一般用在模式替换中
|,类似编程语言用的或运算,制定一种选择结构,可以匹配两边的任何一项
\,转义字符,如果字符串中包括上述的特殊字符,那么就需要这个符号来转义
注意:shell 通配符:shell通配符的作用是用来进行文件匹配(file matching)的,通配符和正则表达式都有特殊的字符,但是解释情况不一样。一般来说需要文件名字的地方使用的是shell通配符,需要匹配字符串的地方使用的是正则表达式!
在linux中一般shell只解释三个通配符:
*代表任意长度的任意字符
?代表任意一个字符
[]代表选中[]中的任意一个字符
grep命令
Grep定义
grep 命令是一种强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检- 查,打印匹配到的行
由正则表达式或者字符及基本文本字符所编写的过滤条件
Global search regular expression and print out the line
全面搜索研究正则表达式并显示出来
Grep用法
grep [匹配条件] [处理文件]
Grep参数
-i 忽略字母大小写
-v 条件取反
-c 统计匹配行数
-q 静默,无任何输出
-n 显示匹配结果所在的行号
-q:
[root@server mnt]# grep '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO'
172.25.254.250 content.example.com
YES
[root@server mnt]# grep -q '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO'
YES
-c
[root@server mnt]# grep -c '/sbin/nologin' /etc/passwd
35