Linux基础之文本处理工具和正则表达式

Linux基础之文本处理工具和正则表达式

正则表达式

REGEXP:Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而是表示空中或通配的功能,类似于增强版的通配符功能。
但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符

正则表达式分两类:

  • 基本正则表达式:BRE
  • 扩展正则表达式:ERE
1基本正则表达式元字符
1.1字符匹配
.		匹配任意单个字符,可以是一个汉字
[]		匹配指定范围内的任意单个字符,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^]		匹配指定范围外的任意单个字符,示例:[^wang]

[:alnum:]  字母和数字
[:alpha:]  代表任何英文大小写字符,亦即 A-Z a-z
[:lower:]  小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:]  大写字母
[:blank:]  空白字符
[:space:]  水平和垂直的空白字符 (比[:blank:]包含的范围广)
[:cntrl:]  不可打印的控制字符(退格,删除,警铃...)
[:digit:]  十进制数字
[:xdigit:] 十六进制数字
[:graph:]  可打印的非空白字符 
[:print:]  可打印字符
[:punct:]  标号符号

范例:

[root@centos8 gkc]# ls /etc/ | grep 'rc[.0-6]'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@centos8 gkc]# ls /etc/ | grep 'rc[.0-6].'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rc.d
rc.local
[root@centos8 gkc]# ls /etc/ | grep 'rc[.0-6]\.'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
1.2匹配次数

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

*       匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.*      任意长度的任意字符
\?      匹配其前面的字符0或1次,即:可有可无
\+      匹配器前面的字符至少1次,即:肯定有,>=1
\{n\}   匹配前面的字符n次
\{m,n\} 匹配前面的字符至少m次,至多n次
\{,n\}  匹配前面的字符之多n次,<=n
\{n,\}  匹配前面的字符至少n次

范例:匹配正负数

[root@centos8 gkc]# echo -1 -2 123 -123 234 | grep -E '-?[0-9]+'
grep: invalid option -- '?'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
[root@centos8 gkc]# echo -1 -2 123 -123 234 | grep -E '\-?[0-9]+'
-1 -2 123 -123 234
[root@centos8 gkc]# echo -1 -2 123 -123 234 | grep -E -- '-?[0-9]+'
-1 -2 123 -123 234
[root@centos8 gkc]# echo -1 -2 123 -123 234 | grep -E '(-)?[0-9]+'
-1 -2 123 -123 234
1.3位置锚定

位置锚定可以用于定位出现的位置

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

范例:排除掉空行和#开头的行

[root@centos8 gkc]# grep -v '^$' /etc/profile | grep -v '^#'
1.4.1分组

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

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

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:

\(string1\(string2\)\)
\1:string1\(string2\)
\2:string2

注意:后面引用引用前面的分组括号中的模式所匹配字符,而非模式本身

1.4.2或者

或者:\|

示例:

a\|b		#a或b
C\|cat		#C或cat
\(C\|c\)at	#Cat或cat

范例:排除空行和#开头的行

grep -v '^$' /etc/httpd/conf/httpd.conf | grep -v '^#'
grep -v '^#\|^$' /etc/httpd/conf/httpd.conf
grep -v '^\(#\|$\)' /etc/httpd/conf/httpd.conf
grep "^[^#]" /etc/httpd/conf/httpd.conf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值