首页 > 其他分享 >正则表达式

正则表达式

时间:2023-01-07 22:22:42浏览次数:39  
标签:字符 grep 正则表达式 cat 锚定 匹配

基本正则表达式:BRE
扩展正则表达式:ERE
grep -E, egrep

元字符分类:字符匹配、匹配次数、位置锚定、分组

基本正则表达式元字符

字符匹配

. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母
[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
\? 匹配其前面的字符0或1次
\+ 匹配其前面的字符至少1次
\{n\} 匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\} 匹配前面的字符至多n次
\{n,\} 匹配前面的字符至少n次

位置锚定

定位出现的位置

^ 行首锚定,用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\<\b 词首锚定,用于单词模式的左侧
\>\b 词尾锚定,用于单词模式的右侧
\<PATTERN\> 匹配整个单词

分组

\(\) 将一个或多个字符捆绑在一起,当作一个整体处理,如:\(root\)\+

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些 变量的命名方式为: \1, \2, \3, ...

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
示例: \(string1\(string2\)\)
\1 :string1\(string2\)
\2 :string2
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
示例:a\|b a或b

C\|cat C或cat

\(C\|c\)at Cat或cat

cat /etc/sysconfig/selinux

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

#用grep去掉注释的内容
cat /etc/sysconfig/selinux | grep ^[^#].*$
SELINUX=disabled
SELINUXTYPE=targeted 

综合应用

cat /etc/httpd/conf/httpd.conf|grep -v '\(^\(#\|[[:space:]]\+#\).*$\)\|\(^$\)'
#过滤掉了被#号屏蔽和被空格+#号屏蔽掉的行以及空白行

cat /data/passwd| grep -o '\<[1-9][0-9]\(\|[0-9]\)\>'
#找出passwd文件中的两位数,三位数

cat /data/passwd| grep '^\([^:]\+\):.*\1$'
lp:x:4:7:lp:/var/spool/lpd:/sbin/lp
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
查找出用户名和shell同名的

egrep及扩展的正则表达式

egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]

扩展正则表达式的元字符:

字符匹配:

. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符

次数匹配:

* 匹配前面字符任意次
? 0或1次
+ 1次或多次
{m} 匹配m次
{m,n} 至少m,至多n次

位置锚定:

^ 行首
$ 行尾
\<, \b 语首
\>, \b 语尾

分组:

()
后向引用:\1, \2, ...

或者:
a|b a或b
C|cat C或cat
(C|c)at Cat或cat

正则表达式直接过滤出ip

ifconfig ens33|egrep -o "(([1-9]?[0-9]|1[0-9]{2}|2([0-4][0-9]|5[0-5]))\.){3}([1-9]?[0-9]|1[0-9]{2}|2([0-4][0-9]|5[0-5]))"
10.50.34.225
255.255.255.0
10.50.34.255

标签:字符,grep,正则表达式,cat,锚定,匹配
From: https://www.cnblogs.com/guangdelw/p/17033721.html

相关文章