Linux 系统中正则表达式的使用

1、什么是正则表达式

英文为:regexp
详细信息查看:man 7 regex
支持的程序:grep,sed,awk,vim, less,nginx,varnish等
类别:基本正则表达式: BRE 扩展正则表达式: ERE
用处:用于匹配或检测想要的内容。

2、字符规则

字符匹配:
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[: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, …
示例: \(string1\+\(string2\)*\) \1
string1\+\(string2\)* \2 : string2
后向引用:引用前面的分组括号中的模式所匹配字符, 而非模式本身
或者\ | 示例:a \ |b: a或b C\ |cat: C或cat \(C\ |c\)at:Cat或cat

用法示例

1、显示/proc/meminfo文件中以大小s开头的行(要求:使用两种方法)
grep ^S\ |^s /proc/meminfo
grep -i ^s /proc/meninfo
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v "/bin/bash$" /etc/passwd
3、显示用户rpc默认的shell程序
grep "^rpc\>" /etc/passwd | cut -d : -f7
grep -w "^rpc" /etc/passwd | cut -d : -f7

4、找出/etc/passwd中的两位或三位数
cat /etc/passwd |grep -o "\<[0-9]\{2,3\}\>"

5、显示CentOS7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行
cat /etc/grub2.cfg |grep "^[[:space:]]\+[^[:space:]]"

6、找出“netstat -tan”命令的结果中以‘LISTEN’后跟任意多个空白字符结尾的行
netstat -tan|grep "\<LISTEN\>[[:space:]]*$"

7、显示CentOS7上所有系统用户的用户名和UID
cat /etc/passwd |cut -d: -f1,3 |grep "\<[[:digit:]]\{1,3\}\>"$

8、添加用户bash、testbash、basher、sh、nologin(其shell为/sbin/nologin),找出/etc/passwd用户名同shell名的行
cat /etc/passwd | grep "\(^.*\)\>.*\/\1$"

9、仅利用df和grep和sort,取出磁盘各分区利用率,并从大到小排序
df |grep ^/dev/sd |grep -o "\b[[:digit:]]\{1,3\}\b%"|sort -rn

留给大家的linux学习者的练习

1、显示三个用户root、mage、wang的UID和默认shell

2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

3、使用egrep取出/etc/rc.d/init.d/functions中其基名

4、使用egrep取出上面路径的目录名

5、统计last命令中以root登录的每个主机IP地址登录次数

6、利用扩展正则表达式分别表示0-9、10-99、100-199、200-249、250-255

7、显示ifconfig命令结果中所有IPv4地址

8、将此字符串:welcome to magedu linux 中的每个字符去重并排序,重复次数多的排到前面

答案

  1. cat /etc/passwd|grep -E "^(root|wang|mage)\>"|cut -d : -f3,7
    cat /etc/passwd|grep -E -w "^(root|wang|mage)"|cut -d : -f3,7
  2. cat /etc/rc.d/init.d/functions |egrep "^.*\(\)"
  3. echo /etc/rc.d/init.d/functions |egrep -o "[^/]+$"
  4. echo /etc/rc.d/init.d/functions |egrep -o "[/]*.+/"
  5. last|grep root|grep -v tty|tr -s ' '|cut -d' ' -f3|grep -v ^:|sort|uniq -c
  6. [0-9]
    [1-0][0-9]
    1[0-9][0-9]
    2[0-4][0-9]
    25[0-5]
  7. ifconfig |grep -o "[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+"
  8. echo "welcome to magedu linux"|egrep -o "[[:alpha:]]"|sort|uniq -c|sort -r|tr -s ' '|cut -d' ' -f3|paste -s -d' '
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux正则表达式是一种用于匹配文本模式的语法。它可以用于各种文本处理任务,如搜索、替换、过滤等。Linux常用的正则表达式语法包括元字符、字符类、量词、分组、反向引用等。在Linux正则表达式可以通过命令行工具(如grep、sed、awk等)或编程语言(如Perl、Python等)来使用。 ### 回答2: Linux正则表达式(Regular Expression)是一种文本模式匹配的工具,可以用来搜索、替换和提取文本数据。 在Linux正则表达式的语法符合POSIX标准,常用的元字符包括: 1. 字符匹配: - . (点号):表示匹配除换行符以外的任意一个字符。 - [ ](方括号):匹配方括号的任意一个字符,如[abc]表示匹配a、b或c。 - [^ ](脱字符):匹配除了方括号指定的字符以外的任意一个字符。 - \ (反斜杠):用来转义特殊字符,如\.表示匹配点号本身。 2. 重复匹配: - *(星号):表示匹配前面的元素零次或多次。 - +(加号):表示匹配前面的元素一次或多次。 - ?(问号):表示匹配前面的元素零次或一次。 - {m,n}(花括号):表示匹配前面的元素至少m次,最多n次。 3. 边界匹配: - ^ (插入符):匹配行的开头位置。 - $ (美元符):匹配行的结尾位置。 - \b (单词边界):匹配单词的边界,包括字母、数字和下划线。 4. 分组匹配: - ( )(圆括号):将多个元素组合成一个单元,可以进行分组匹配和捕获。 Linux常用的命令行工具如grep、sed和awk都支持正则表达式。通过正则表达式,可以灵活地搜索、匹配和修改文本内容,提高工作效率和准确性。 需要注意的是,正则表达式可以灵活强大,但在复杂的情况下,可能会导致性能较慢。因此,在使用正则表达式时,应根据实际需要选择合适的模式并进行性能测试。 ### 回答3: Linux正则表达式指的是在Unix/Linux系统使用的一种文本模式匹配工具,它可以用来搜索、替换、匹配和验证文本。正则表达式是一种强大的字符匹配工具,它能够在文本进行复杂的模式匹配,并提供了多种符号和操作用于构建匹配模式。 在Linux,我们可以使用一些命令行工具来使用正则表达式,比如grep、sed、awk等。grep是一个常用的工具,用于在文本搜索匹配某个模式的行,它可以通过使用正则表达式来指定模式。通过使用不同的元字符、字符类和操作符,我们能够构建不同的匹配模式。 正则表达式的元字符包括:. * ? [] () {} ^ $ | \,它们分别代表不同的特殊含义。比如,"."匹配任意单个字符,"*"匹配前面的字符任意次数(包括0次),"?"匹配前面的字符0次或1次,"[]"定义一个字符类,匹配其的任意字符,"()"用于分组,"{}"用于指定重复次数,"^"匹配行的开头,"$"匹配行的结尾,"|"代表逻辑或运算,"\“用于转义字符,等等。 正则表达式还提供了一些预定义的字符类,比如\d匹配任意一个数字字符,\w匹配任意一个数字、字母、下划线字符,\s匹配任意一个空白字符,等等。我们还可以使用“-”来定义字符范围。 通过使用这些元字符、字符类和操作符,我们可以构建不同的正则表达式,用于匹配我们需要的文本模式。在Linux正则表达式广泛应用于各种任务,比如文件搜索、日志分析、文本处理等。熟练掌握正则表达式将有助于我们更高效地完成这些任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值